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);
}