0

AirForce を取得する必要がある私の Java ゲームでは、プレイヤー、ミサイル、および敵の単純な移動アニメーションがあります。

私の問題は、これらのアニメーションが非常に遅いことです。いつものように遅くはありませんが、アニメーションが発生し、プログラムが何かを待っているようです..しかし、何がわかりません. また、それは睡眠時間ではありません-私がそれを減らすと、同じですがより速く表示されます。mooooooove - 停止 - mooooooooove - 停止、そしてこれは非常に高速です。

だから、ここに私が JPanels を移動する重要なコードがあります: (これには写真が含まれています)

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