在我的 Java 游戏中,它应该有一个 AirForce,我有简单的移动动画,用于玩家、导弹和敌人。
我的问题是,这些动画非常慢。不像往常一样慢,但似乎动画发生了,程序正在等待一些东西..但是什么 - 我不知道。这也不是睡眠时间 - 当我减少它时,它显示相同但更快。所以mooooooove - 停止 - moooooooove - 停止,这非常快。
所以,这里是重要的代码,我移动 JPanel 的地方:(其中包含图片)
public void run(){
while(running){
if(!pause){
System.out.println(timeSinceLastFrame);
updateTimes();
handleMissiles();
handlePlayer();
handleEnemys();
repaint();
try{Thread.sleep(10);}catch(InterruptedException e){}
}
}
}
public void updateTimes(){
thisFrame = System.currentTimeMillis();
timeSinceLastFrame = ((float) (thisFrame-lastFrame)/1000f);
lastFrame=thisFrame;
timeSinceLastMissile++;
}
public void handleMissiles(){
for(int i = 0; i < missiles.size(); i++){
Missile m = missiles.get(i);
m.setX((int) (m.getX() * 1.02 + 1));
m.resetPosition();
if(m.isUnused()){
gameField.remove(m);
missiles.remove(m);
}
}
}
public void handlePlayer(){
if(flyUp){ player.fly(0); }
if(flyRight){ player.fly(1); }
if(flyDown){ player.fly(2); }
if(flyLeft){ player.fly(3); }
if(shoot){ shoot(); }
}
public void handleEnemys(){
for(int i = 0; i < enemys.size(); i++){
Enemy e = enemys.get(i);
e.setX((int) (e.getX() - e.speedX));
e.resetPosition();
if(e.isDestroyed()){
gameField.remove(e);
enemys.remove(e);
}
}
}
玩家飞行方法如下所示:
public void fly(int dir){
switch(dir){
case 0: flyUp(); break;
case 1: flyRight(); break;
case 2: flyDown(); break;
case 3: flyLeft(); break;
}
resetPosition();
}
public void flyUp(){
if(y > 0){
setY(getY() - 3);
}
}
public void flyRight(){
if(x < frameWidth - width - 10){
setX(getX() + 3);
}
}
public void flyDown(){
if(y < frameHeight - height - 30){
setY(getY() + 3);
}
}
public void flyLeft(){
if(x > 0){
setX(getX() - 3);
}
}
重置位置没什么特别的:
public void resetPosition(){
setBounds(x, y, width, height);
}