0

こんにちは、私は小さな正方形を上下左右にスムーズに動かす簡単なプログラムを書こうとしています。

このままでは、正方形は確かに 4 方向に移動しますが、正方形の方向を変更しようとすると顕著な遅延が生じます。最終的には「レンガ」ゲームに似た小さなゲームを作成する予定ですが、そのためにはオブジェクトがスムーズに動く必要があります。これを達成する方法について誰かアドバイスをもらえますか?

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseListener;

public class FutureGame extends Applet implements KeyListener{

int deltax; 
int deltay;

public void init(){

    deltax = 0;
    deltay = 0;
    this.addKeyListener(this);
}

@Override
public void keyPressed(KeyEvent ke) {

    if(ke.getKeyCode() == ke.VK_RIGHT){
        deltax = deltax +10;
    }

    if(ke.getKeyCode() == ke.VK_LEFT){
        deltax = deltax - 10;
    }

    if(ke.getKeyCode() == ke.VK_UP){
        deltay = deltay - 10;
    }

    if(ke.getKeyCode() == ke.VK_DOWN){
        deltay = deltay +10;
    }
    this.repaint();
}
@Override
public void keyReleased(KeyEvent arg0) {
    // TODO Auto-generated method stub

}
@Override
public void keyTyped(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

public void paint(Graphics g){

    g.drawRect(deltax, deltay, 10, 10);
}

}
4

2 に答える 2

1

スレッド (ゲームの主な計算) のスリープ/待機時間が非常に短い場合、キー リスナーはその短い時間内にキーストロークをキャッチできませんでした。これらのスレッドの待機時間を大きくして、再試行してください。try-catch ブロックのことを意味します。

あなたは直接描いています。バッファリング/ダブルバッファリングを使用します。

Changing the buffer is much more faster than changing the contents of screen.
于 2012-07-25T11:44:34.063 に答える
0

まず、描画メソッドとして paintComponent() を使用し、Graphics g を Graphics2D にキャストします。これをより「スイング」させ、最後に java2s.com サイトjava2s.com - Advanced Graphics - Smooth Movesのコードに従います。

于 2012-07-25T11:48:05.230 に答える