0

嗨朋友们,我正在尝试编写一个简单的程序,该程序将平滑地向右、向左、向上和向下移动一个小方块。

实际上,正方形确实会在四个方向上移动,但是在尝试改变正方形的方向时会有明显的延迟。我计划最终编写一个类似于“砖块”游戏的小游戏,但为了做到这一点,我的对象必须平稳移动。有人可以就如何实现这一目标给我一些建议吗?

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseListener;

public class FutureGame extends Applet implements KeyListener{

int deltax; 
int deltay;

public void init(){

    deltax = 0;
    deltay = 0;
    this.addKeyListener(this);
}

@Override
public void keyPressed(KeyEvent ke) {

    if(ke.getKeyCode() == ke.VK_RIGHT){
        deltax = deltax +10;
    }

    if(ke.getKeyCode() == ke.VK_LEFT){
        deltax = deltax - 10;
    }

    if(ke.getKeyCode() == ke.VK_UP){
        deltay = deltay - 10;
    }

    if(ke.getKeyCode() == ke.VK_DOWN){
        deltay = deltay +10;
    }
    this.repaint();
}
@Override
public void keyReleased(KeyEvent arg0) {
    // TODO Auto-generated method stub

}
@Override
public void keyTyped(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

public void paint(Graphics g){

    g.drawRect(deltax, deltay, 10, 10);
}

}
4

2 回答 2

1

如果您的线程(游戏的主要计算)睡眠/等待时间非常短,那么您的按键侦听器无法在这么短的时间内捕捉到您的击键。使这些线程等待时间更长,然后重试。我的意思是 try-catch 块中的东西。

你是直接画的。使用缓冲/双缓冲。

Changing the buffer is much more faster than changing the contents of screen.
于 2012-07-25T11:44:34.063 回答
0

首先使用 paintComponent() 作为绘图方法,然后将 Graphics g 转换为 Graphics2D - 使其更加“Swingy”,最后但并非最不重要的是遵循 java2s.com 站点java2s.com - Advanced Graphics - Smooth Moves中的代码

于 2012-07-25T11:48:05.230 回答