2012-08-08 51 views
1

我创建了一个小型太空侵略者项目,并且我有外星人不断地从左到右循环。当他们击中屏幕的末端时,他们重新从左到右重新画右边。我已经设置了窗口大小,并且已经查看了关于如何在Java中创建空间入侵者的各种教程,但是大多数教程都提到了我尝试的同样的东西。是否有人可以指出我的编码出错了,以便我知道如何解决它。如何让侵略者在java中左右移动

这是外星人类的代码。有不同的外国人,但是所有的类看起来几乎一样,因为这一个:

package spaceinvaders2; 

import java.awt.Graphics; 
import java.awt.Image; 
import javax.swing.ImageIcon; 

class Alien extends MoveObject 
{ 
    Image Alien = new ImageIcon(getClass().getResource("alien.gif")).getImage(); 
Alien(int x, int y, int w, int h) 
{ 
    super(x, y); 
    bounds.width = w; 
    bounds.height = h; 
} 

public void paint(Graphics g) 
{ 
    System.out.println("Alien generated"); 
    bounds.x = bounds.x - 2; 

    if ((bounds.x + bounds.width)< 0) 
    { 
     bounds.x = 750; 
     dead = false; 
    } 

    g.drawImage(Alien,bounds.x,bounds.y,bounds.width, bounds.height, this); 
} 
} 

编辑:我的paint方法被调用在它绘制所有的图形游戏的主要功能的一部分。绘图不是问题,它是这个班级中外星人的运动。

+0

您可以指定什么是错的外星人的运动?从看你的代码我可以说移动速度取决于帧速率可能不是恒定的,但也许这不是问题。 – denahiro 2012-08-08 10:29:52

+0

在不了解代码的情况下很难提供反馈,但基本上在顶层组件中,您需要捕获关键笔划(不,真的;)),可能使用类似键绑定API和调整移动方向参数。根据你想要达到的目标,你可以继续增加/减少方向,直到新的击键被注册为 – MadProgrammer 2012-08-08 10:54:52

回答

2

我认为paint方法只是运行一次。 你必须添加一个线程来调用paint()方法periodi。

+0

我已经在我的主游戏类中拥有了这个。所有的绘画方法都被称为那里绘制图形 – user1134409 2012-08-08 10:26:15

+0

你有没有测试它? – stetro 2012-08-08 10:29:18

+0

是的,我已经运行了游戏,主类每8秒重新绘制一次,将它们从屏幕上右移到左侧。我试图将它们从左到右移动,一旦它们碰到屏幕边界,而不是从右到左的不断循环。 – user1134409 2012-08-08 10:31:01

0

根据你的评论,你希望外星人一旦移动到屏幕边界就从左向右移动,而不是重新进入另一边。

解决方法很简单,你必须跟踪外星人的方向。一个简单的方法是将它的步长变为一个变量。

你给外国人类step成员如下:

int step = -2; 

然后:

bounds.x = bounds.x + direction; 

if ((bounds.x + bounds.width)< 0) 
{ 
    step = +2; 
} 
else if ((bounds.x - bound.width) > 750) 
{ 
    step = -2; 
} 
dead = false; 

g.drawImage(Alien,bounds.x,bounds.y,bounds.width, bounds.height, this); 

题外话,我觉得dead = false不会在你的paint方法属于。

+0

谢谢你,现在它从左到右移动,但并不坚持屏幕尺寸,所以我认为随着它的一些混乱可能最终奏效。再次感谢您 – user1134409 2012-08-08 12:38:45

+0

@ user1134409不客气。在我的示例代码中有一个小错误:第二个条件应该是'(bounds.x - bound。宽度)> 750'(减去而不是加号)。玩得开心编码! – 2012-08-08 12:46:42

1

你需要给外星人一个direction属性(+1或-1),告诉它的移动方向。当它要离开屏幕时,翻转方向。例如,如果方向为+1,则将其更改为-1,反之亦然。

这里是我创建了一个简单的例子:

public class Alien extends JPanel 

    private int x = 5; 
    private int y = 5; 
    private int direction = 1; 

    @Override 
    public void paint(Graphics g) { 
     super.paint(g); 
     g.clearRect(x, y, getWidth(), getHeight()); 

     // draw the alien. 
     g.drawRect(x, y, 10, 10); 

     // move it 
     x = x + 5 * direction; 

     // is it about to go off-screen? 
     if (x < 0 || x + 10 > getWidth()) { 
      // change the direction 
      direction *= -1; 
     } 
    } 
}