【问题标题】:Menu for a game in JavaJava 中的游戏菜单
【发布时间】:2014-12-09 17:52:27
【问题描述】:

我正在尝试创建一个简单的菜单(黑色背景),在屏幕中间只有一个简单的按钮,上面写着“播放!”,然后当用户单击该按钮时,它将开始游戏。现在我不打算在其中复制和粘贴我所有的游戏代码,但我将给出扩展我正在使用的小程序的起始部分。这是代码:

public class Game extends JApplet implements Runnable, KeyListener
{
AnimateSprite user;
AnimateSprite monster, troll;
Coins ten, twenty;
Thread thread;
Random r;
public void init()
{
    r = new Random();
    user = new AnimateSprite();
    user.setImage(getImage(getCodeBase(), "player.gif"));
    user.setLocation(0, 0);
    monster = new AnimateSprite();
    monster.setImage(getImage(getCodeBase(), "monster.gif"));
    monster.setLocation(100, 100);
    troll = new AnimateSprite();
    troll.setImage(getImage(getCodeBase(), "monster.gif"));
    troll.setLocation(350, 350);
    setupCoins();
    setFocusable(true);
    addKeyListener(this);
    thread = new Thread(this);
    thread.start();
}
public void setupCoins()
{
    ten = new Coins(10);
    twenty = new Coins(20);
    ten.setLocation(400, 350);
    twenty.setLocation(450, 50);
    ten.setImage(getImage(getCodeBase(), "coins.gif"));
    twenty.setImage(getImage(getCodeBase(), "coins.gif"));
}

我要做的就是为用户使用/创建一个简单的界面,他们只需点击“播放!”按钮,然后它将启动游戏,就像我单独运行小程序一样。我的问题是如何做到这一点的最佳方式。任何帮助是极大的赞赏!如果需要,我还会添加更多代码。

【问题讨论】:

  • 您的“问题”不是问题。这是一个问题,因为您应该提出问题,我们应该回答它们。没有这个问题我们无法回答。所以,问一些问题,我们会回答。
  • 你需要问一个问题。
  • 为什么要编写小程序?如果是老师指定的,请参考Why CS teachers should stop teaching Java applets
  • 我有点厌倦了不得不使用applet,我的老师甚至说它们在Java中几乎没有使用,但他教的课程是通过使用applet来介绍Java。

标签: java swing applet jtable jbutton


【解决方案1】:

你可以在 init 方法中添加播放按钮,并让它调用一个方法,你不能使用 start 方法,它只是启动线程。

例如:

public void init(){
    //whatever you want here
    t1 = new Thread(this);
    play = new JButton("Play");
    //setLocation, etc, etc.
    add(play);
    play.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            remove(play);
            repaint();
            test();
        }
    });
}
public void test(){
    t1.start();
}
public void run(){
    //whatever you want here
}

所以这里发生的是你有一个按钮,当按下它时,它会从屏幕上移除,调用paint(通过重绘)来绘制屏幕,​​然后调用一个侧面方法(不能是start)来启动线程,这将启动您的动画。

【讨论】:

  • 我一定会尝试一下,看起来这可能是一种添加简单 JButton 的简单方法。
  • @Fyree 不要忘记 JButton 也可以用 ImageIcon 标记,因此如果您希望它看起来更好,我会制作一个显示“播放”的图标,但这是您的选择。如果您将按钮变大或类似的东西,文本也不会缩放。
  • 它编译正确,但是直接进入游戏,并且没有显示带有JButton“播放”的菜单。
  • 如果您也想查看我遇到的另一个问题,这里有一个链接:stackoverflow.com/questions/27411131/…
【解决方案2】:

试试这个

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Joption {
 public static void main(String[] args) {
final JFrame f = new JFrame("The Frame");
   f.setSize(300, 300);
   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
   int width = (int)screenSize.getWidth();
   int height = (int)screenSize.getHeight();
   f.setLocation((int)(width/4.5), (int)(height/3.5));
   JButton play=new JButton("play");
   play.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e) {
           System.out.print("your code/start meathod goes here");
           f.dispose();
       }});
   f.add(play);
   f.setVisible(true);
   }

}

我不太了解你的代码,所以我不能做得比这更好,也许我可以让按钮看起来更好,但你明白了。

    import java.awt.Dimension;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.JApplet;
    import javax.swing.JButton;
    import javax.swing.JFrame;


    public class Jap extends JApplet {
    /**
         * 
         */
        private static final long serialVersionUID = 1L;

    public void init(){
    //    r = new Random();
    //    user = new AnimateSprite();
    //    user.setImage(getImage(getCodeBase(), "player.gif"));
    //    user.setLocation(0, 0);
    //    monster = new AnimateSprite();
    //    monster.setImage(getImage(getCodeBase(), "monster.gif"));
    //    monster.setLocation(100, 100);
    //    troll = new AnimateSprite();
      //troll.setImage(getImage(getCodeBase(), "monster.gif"));
        //troll.setLocation(350, 350);
        //setupCoins();
        setFocusable(true);
        //addKeyListener(this);

        //thread = new Thread(this);
        final JFrame f = new JFrame("The Frame");
        f.setSize(300, 300);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int width = (int)screenSize.getWidth();
        int height = (int)screenSize.getHeight();
       f.setLocation((int)(width/4.5), (int)(height/3.5));
       JButton play=new JButton("play");
       play.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                System.out.print("your code/start meathod goes here");

                //thread.start(); thread will have to be final to be called here or rename it to something that is final
                f.dispose();
            }});
       f.add(play);
       f.setVisible(true);
     }
      void Start(){

      }
    }

像这样。

【讨论】:

  • 理解OP的代码是回答的首要前提。
  • 不,他要了一个按钮,我给了一个按钮,其余的都不需要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
相关资源
最近更新 更多