0

我正在制作像 Space Impact 这样的游戏。在我的游戏中,火箭工作正常,但我不能随机创建怪物。怪物在屏幕上,但他们没有移动,所以他们没有活动 我该怎么做?

public class Dnm extends JFrame implements Runnable {
    Graphics dbg;
    Image dbImage;
    Image Pik1;
    Image Boss;
    static ImageIcon active;

    int x, y, xDirection, yDirection, BossX, BossY;

    public void run() {
        try {
            while (true) {
                move();
                boss();
                Thread.sleep(10);
            }
        } catch (Exception e) {
            System.out.println("Uh-oh, something went wrong!.");
        }
    }

    private void move() {
        x += xDirection;
        y += yDirection;
    }

    private void boss() {
        while (BossX == 0) {
            BossX = getX() - 1;
        }

        Random rastgele = new Random(getY());
        BossY = rastgele.nextInt();
    }

    public void setXDirection(int xdir) {
        xDirection = xdir;
    }

    public void setYDirection(int ydir) {
        yDirection = ydir;
    }

    // KEY COMMANDS //
    public class AL extends KeyAdapter {
        @Override
        public void keyPressed(KeyEvent e) {
            int keyCode = e.getKeyCode();

            if (keyCode == e.VK_LEFT) {
                setXDirection(-1);
            }
            if (keyCode == e.VK_RIGHT) {
                setXDirection(+1);
            }
            if (keyCode == e.VK_UP) {
                setYDirection(-1);
            }
            if (keyCode == e.VK_DOWN) {
                setYDirection(+1);
            }
        }

        @Override
        public void keyReleased(KeyEvent e) {
            int keyCode = e.getKeyCode();
            if (keyCode == e.VK_LEFT) {
                setXDirection(0);
            }
            if (keyCode == e.VK_RIGHT) {
                setXDirection(0);
            }
            if (keyCode == e.VK_UP) {
                setYDirection(0);
            }
            if (keyCode == e.VK_DOWN) {
                setYDirection(0);
            }
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }
    }

    // CONSTRUCTOR //
    public Dnm() {
        //Image Import
        ImageIcon still = new ImageIcon("img/rocket.png");
        Pik1 = still.getImage();

        addKeyListener(new AL());

        setTitle("Dnm");
        setSize(500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(true);
        setVisible(true);

        x = 15;
        y = 15;
    }

    public void paint(Graphics g) {
        dbImage = createImage(getWidth(), getHeight());
        dbg = dbImage.getGraphics();
        paintComponent(dbg);
        g.drawImage(dbImage, 0, 0, this);

    }

    public void paintComponent(Graphics g) {
        ImageIcon background = new ImageIcon("img/space.jpeg");
        Image background1 = background.getImage();

        ImageIcon still1 = new ImageIcon("img/Alien.png");
        Boss = still1.getImage();

        g.setColor(Color.red);
        g.drawImage(background1, 0, 0, this);
        g.drawImage(Boss, BossX, BossY, this);
        g.drawImage(Pik1, x, y, this);
        g.setColor(Color.blue);

        repaint();
    }

    public static void main(String[] args) {
        Dnm game = new Dnm();

        Thread t1 = new Thread(game);
        t1.start();
    }
}

谢谢你。

4

2 回答 2

1

由于您的代码不完整,很难确定,但这一行看起来很可疑:

while (BossX == 0) {
   BossX = getX() - 1;
}

这段代码很可能会执行一次,对吧?如果 BossX 最初为零,则代码在您更改其值的地方执行。在下一次更新中,BossX 不为零(大概),因此代码不会执行。由于 BossX 是绘制 Boss 的 X 坐标,所以它不会移动。相反,它只是在同一个地方一遍又一遍地重绘。

要让怪物随机移动,请在每个游戏循环期间随机增加或减少 X 和 Y 坐标值。添加第二个随机变量以使它们以随机速度在随机方向上移动(通过将坐标值调整为大于一的值)。

正如 NPE 评论的那样,您应该在调试器中单步执行代码并准确找出发生了什么。

于 2013-04-08T15:39:52.613 回答
0

我是编程的初学者,但这是我最好的尝试:

我将创建一个每 x 秒调用一次的方法,该方法使用 Math.Random() 生成一个随机数。我会说

int number = .5;  
if(number > Math.Random())
     GenerateMonster();

然后,您的 GenerateMonster 方法将使用 Monster 的默认值创建一个新对象。为了让被创造出来的怪物以某种方式行动,您需要在您定义怪物如何行动的任何地方继承这些功能。我没有看到这些函数的代码,所以我假设你只是没有列出它们。希望这至少会有所帮助。祝你好运!

于 2013-04-08T15:41:00.180 回答