1
私の2Dゲームでは、動きの速さは様々ですね。私は自分のデスクトップでゲームを作っていましたが、うまく走っていましたが、私はラップトップを使い、Playerはデスクトップを遅く動かしました。ここで移動速度はさまざまですか?
は私の現在のゲームループである:ここで
public void gameLoop() throws IOException {
isRunning = true;
while(isRunning == true) {
Graphics2D g2d = (Graphics2D) strategy.getDrawGraphics();
//main game loop
//updates everything and draws
//main componenets
//e.g. Player
// clear the screen
g2d.setColor(Color.lightGray);
g2d.fillRect(0,0,640,496);
//drawing
player.paint(g2d);//paint player
map.paint(g2d);//paint each wall in wall list
g2d.dispose();
strategy.show();
//update
try { player.updateMovement(); } catch (Exception e) {};
try { Thread.sleep(4); } catch (Exception e) {};
}
}
は私player.updateMovementある()メソッド:
public void updateMovement() {
if(!down || !up) {
ny = 0;
}
if(!left || !right) {
nx = 0;
}
if(left) {
nx = -1;
}
if(right) {
nx = 1;
}
if(up) {
ny = -1;
}
if(down) {
ny = 1;
}
if ((nx != 0) || (ny != 0)) {
x += nx;
y += ny;
}
}
私はこの問題をどのように修正することができますか?
ありがとうございました。
を参照してください。ありがとう、私は最適化できる部分を指摘できますか? –
繰り返しの間に変更されないものはすべて、whileループの外側に置くことができます。例えば、オブジェクトの作成は「高価」です。私は新しいインスタンスを作成するのではなく、その間に 'Graphics2D'を作成し、それをクリアしてループ内で更新することを考えています。例外をスローしないように 'player.updateMovement()'メソッドを変更して、try-catchを取り除くこともできます。一般に、新しいオブジェクトを作成することは避けてください(代わりに再利用してください)、ラッパーの代わりにプリミティブを使用してください(Integerよりも優れています)。 –
私はそれを少しきれいにしたと信じています。 –