0

在我的 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);
}
4

0 回答 0