1

今、私はこれが尋ねられたことを知っていますが、html などではなくこれを行う方法を知る必要があります。他のすべての Java ファイルを含めずに、私のコードを次に示します。

package rtype;

import java.awt.Image;
import java.awt.event.KeyEvent;

import java.util.ArrayList;

import javax.swing.ImageIcon;

public class aa {
private int xd;
private int yd;
private int dx;
private int dy;
private int x;
private int y;
private Image image;

private ArrayList missiles;

private final int CRAFT_SIZE = 70;

public aa() {
    ImageIcon ii = new ImageIcon(this.getClass().getResource("/aa.png"));
    image = ii.getImage();
    missiles = new ArrayList();
    x = 10;
    y = 10;
    xd = -14;
    yd = 140;
}


public void move() {
    if(y >=xd)
        y += dx;
    else if(y < xd)
        y += 1;
    if(y <=yd)
        y += dy;
    else if(y > yd)
        y += -1;
}

public int getX() {
    return x;
}

public int getY() {
    return y;
}

public Image getImage() {
    return image;
}

public ArrayList getMissiles() {
    return missiles;
}

public void keyPressed(KeyEvent e) {

    int key = e.getKeyCode();

    if (key == KeyEvent.VK_SPACE) {
        fire();
    }

    if (key == KeyEvent.VK_UP) {
        dy = -1;
    }

    if (key == KeyEvent.VK_DOWN) {
        dy = 1;
    }

    if (key == KeyEvent.VK_RIGHT) {
        yd++;
    }

    if (key == KeyEvent.VK_LEFT) {
        yd--;
    }

    if (key == KeyEvent.VK_W) {
        xd++;
    }

    if (key == KeyEvent.VK_S) {
        xd--;
    }
}

public void fire() {
    try{
    missiles.add(new Missle(x + CRAFT_SIZE, y + CRAFT_SIZE));
    }catch(Exception e){}
}

public void keyReleased(KeyEvent e) {
    int key = e.getKeyCode();

    if (key == KeyEvent.VK_UP) {
        dy = 0;
    }

    if (key == KeyEvent.VK_DOWN) {
        dy = 0;
    }
}
}

そこで、fire() メソッドで、ショット間で遅延させたいと思います。どうやって?

これがn00bishならごめんなさい

4

4 に答える 4

2

すでに指摘されているようThread.sleep()に、あなたの質問に対する直接的な答えです。

ただし、コードを見ると、アニメーションのタイミングに使用したいことがわかりますが、それはお勧めできThread.sleep()ません。(ここではあまり詳しく説明しません。試してみてください。害はありません。その理由はすぐにわかります。)

代わりに必要なのは、たとえば 3 部構成のシステムです。

  1. 最初の部分は入力を処理し、それをコマンドに変換します。コマンドはすぐにキューに入れられます。
  2. 2 番目の部分は、ゲーム エンジン スレッドです。名前が示すように、これは独自のタイミング (「ハートビート」) を行う別のスレッドです。もちろん、Thread.sleep()ここで使用することもできますが、時折非常に不正確になる可能性があることに注意してください。このエンジンは、キューからコマンドを取得して処理し、ゲームの内部状態 (座標など) を更新します。
  3. 3 番目の部分は、表示更新スレッドです。繰り返しますが、これは上記の 2 つとは別のスレッドであり、ゲームの内部状態を表示よりも頻繁に更新する必要があるため、ゲーム エンジンとは異なる速度で実行される独自の別のハートビートもあります。 . 実際の画像や描画を扱うビットです。

最初は大変な作業のように聞こえますが、そうでない場合よりもはるかに少ない作業です。

于 2012-10-25T23:12:04.273 に答える
1

Thread.sleep(1000);1000 ミリ秒 (1 秒) スリープするために使用できます。

InterruptedException をキャッチする必要があることに注意してください。

try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    // Handle here
}
于 2012-10-25T22:55:45.107 に答える
0
Thread.sleep(x);

xミリ秒単位です。詳細については、sleep() のチュートリアルを参照してください。

于 2012-10-25T22:55:34.497 に答える