現在、Java 2D ゲームを作成しており、その中でユーザーからコマンドを受け取り、キャラクターを一定の距離だけ上下左右に移動します。現在for
、ユーザー入力のループを使用して文字列を Player クラスに渡します。これにより、ユーザー入力文字列がキャラクターを移動する方向のいずれかと一致するかどうかがチェックされます。このすべてが実行されると、プレイヤーが目的の場所にテレポートしたように見えます。プレイヤーが自然にその場所に移動しているように見せるために、キャラクターがターゲットの場所に到達するまで一定量のピクセルを移動する方法はありますか?
JTextFields
これは、プレーヤーを移動するためのユーザーのコマンドを含むをループするために使用される movePlayer 関数です。各strings
テキスト フィールドの は別の関数に渡されます: inputListener
.
public void movePlayer(){
for (int i = 0; i < userTextInput.size(); i++) {
inputListener(userTextInput.get(i).getText());
}
}
は、ユーザが入力した が移動タイプと一致するinputListener
かどうかをチェックし、 はキャラクタを移動するための適切なメソッドを開始します。strings
private void inputListener(String Input){
if(Input.equals("up")){
player.moveCharacterUp();
}else if(Input.equals("down")){
player.moveCharacterDown();
}else if(Input.equals("left")){
player.moveCharacterLeft();
}else if(Input.equals("right")){
player.moveCharacterRight();
}
}
これは、メソッドの実行に従って文字の位置が設定される場所ですx
。y
inputListener
public void moveCharacterUp(){
y -= moveSpeed;
}
public void moveCharacterDown(){
y += moveSpeed;
}
public void moveCharacterLeft(){
x -= moveSpeed;
}
public void moveCharacterRight(){
x += moveSpeed;
}
Thread
私が使用しているの実行方法。
public void run(){
init();
long start;
long elapsed;
long wait;
while(running){
start = System.nanoTime();
update();
draw();
drawToScreen();
elapsed = System.nanoTime() - start;
wait = targetTime - elapsed / 1000000;
if(wait < 0) wait = 5;
try{
Thread.sleep(wait);
}catch(Exception e){
e.printStackTrace();
}
}
}