如何在java中使用计时器进行精灵移动?

时间:2014-06-28 03:29:06

标签: java timer sprite

嗯,我非常(几个月前才开始)新编程,我正在学习java。

无论如何,如何使用计时器进行精灵移动说:

  private Timer timer = new Timer(5000,this);

和像这样的精灵:

    private JLabel player = new JLabel(new ImageIcon("Sprites/apple.png"));

使用这样的构造函数:

 public timing()
{
    Container c = getContentPane();
    c.setLayout(null);
    setVisible(true);
    setSize(1280,720);
    player.setBounds(x,y,100,100); //Use this for moving!
    c.add(player);

    timer.start();
    addKeyListener(
        new KeyAdapter(){

        public void keyPressed(KeyEvent e){
                String key = e.getKeyText(e.getKeyCode());
                if(key.equals("Down"))
                {
                  What Do I put Here?
                }}});


}

所以每一秒,精灵

  player

会像

一样移动
  x+=5 and y+=5

我正在使用

  public void paint(Graphics g)
{
    super.paint(g);
    player.setBounds(x,y,100,400);
}

(我很抱歉,我只是一个学习JAVA的孩子)

2 个答案:

答案 0 :(得分:0)

我认为你想要做的是当你按下“你想要启动计时器时。”

你能做的是:

if(key.equals("Down"))
{
   long start=System.currentTimeMillis();
   while(start%5000==0)
       repaint();
}

repaint()的作用是调用paint()方法。

所以: 你应该做的是在paint()方法中绘制你的图像。 当你调用repaint()时,你调用paint(),所以你需要做的就是在paint()方法中将x和y增加5!

结果:每次重绘()时,都会擦除该组件中的所有内容,然后再次绘制,但是使用此x + 5 y + 5坐标,可以移动图像效果。

希望这有帮助并祝你好运!

答案 1 :(得分:0)

在paint()方法中,创建一个Ellipse2D对象并使用fill方法渲染“player”。

为简化起见,假设“玩家”是一个圆圈

class DrawSurface extends JComponent{
public void paint(Graphics g){

    Graphics2D g = (Graphics2D) g;
    x_pos += 5;
    Shape player = new Ellipse2D.Float(x_pos, 0, 30, 30);
    g.setColor(Color.RED);
    g.fill(player);

}
}

在您的keyPress方法中,添加以下内容

public void keyPressed(KeyEvent e){
            String key = e.getKeyText(e.getKeyCode());
            if(key.equals("Down")){
            DrawSurface canvas = new DrawSurface();
            ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(3);
            executor.scheduleAtFixedRate(canvas.paint(), 0L, 30L, TimeUnit.MILLISECONDS);
            }
}

scheduleAtFixedRate每30个单位重复执行paint()