嗨,朋友们,我正在尝试写一个简单的程序,将移动一个小方块向右,向左,向上和向下平滑。
现在,正方形确实会在四个方向上移动,但当试图改变正方形的方向时,会有一个明显的延迟。我计划最终写一个类似于‘砖头’游戏的小游戏,但为了做到这一点,我的对象必须平滑地移动。有人能给我一些关于如何实现这一点的建议吗?
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);
}
}发布于 2012-07-25 19:44:34
如果你的线程(游戏的主要计算)的休眠/等待时间非常小,那么你的按键监听器就不能在这么短的时间内捕捉到你的击键。增加线程等待时间,然后重试。我指的是try-catch块中的内容。
您正在直接绘图。使用缓冲/双缓冲。
Changing the buffer is much more faster than changing the contents of screen.发布于 2012-07-25 19:48:05
首先使用paintComponent()作为绘制方法,然后将Graphics g转换为Graphics2D -使其更“摇摆”,最后但并非最不重要的是遵循java2s.com站点java2s.com - Advanced Graphics - Smooth Moves中的代码
https://stackoverflow.com/questions/11648911
复制相似问题