0

私は 2D Java ゲームを作成しており、数値の配列からランダムに選択された y 軸を使用して、数秒 (2 または 3) ごとに画像を生成する方法を見つけようとしています。一度に複数の同じ画像を画面に表示する方法、タイマーを作成する方法、または配列から乱数を取得する方法がわかりません。

誰かがこれで私を助けてくれますか? 私はこれに約3週間立ち往生しており、衝突に関するいくつかのヒントもいただければ幸いです。

*全体として、配列からランダムに選択された ay で画像を生成しようとしています "int[] blocky = {0, 29, 50, 79, 109, 138, 168, 204, 222, 248, 276, 304, 334、363、393、418、443}; "

4

2 に答える 2

1

クラスのどこかで初期化された、数値の配列が次のようになっていると仮定します。

int[] 数値 = 新しい int[]{ 123, 321, 456, 765, 923, 931 };

次のようなメソッドを作成できます。

private int getRandomNumberFromArray(){
     int min = 0;
     int max = numbers.length;

     return numbers[min + (int)(Math.random() * ((max - min) + 1))];
}

次に、そのメソッドを次のように呼び出すことができます。

int randomNumberFromArray = getRandomNumberFromArray();

Java の Random 実装の詳細な説明については、このスレッドを参照してください。

あなたの他の問題については、あなたが何を達成しようとしているのかよくわかりません。詳細を教えてください。


アップデート

OPが更新されたので、あなたが何をしようとしているのかについて、より良いアイデアが得られたと思います。改訂させてください。

まず、Slick2D で画像を表示するには、ここに短いビデオ チュートリアルがあります。彼の一連の記事は非常に明快で簡潔なので、ぜひチェックすることをお勧めします。

タイマーについては、こちらのコードを見つけました。

int time;

public void update(GameContainer container, int delta) {
    time += delta;
}

public void render(GameContainer container, Graphics g) {
    g.drawString("Time : " + time/1000, 100, 100);
}

これにより、画面上の x=100、y=100 で更新される単純なタイマーが描画されます。これは、テスト目的で使用できるものです。ランダムな間隔については、上記のコードを次のように拡張できます。

int time;
int deadline; // initialize this somewhere in the start of your game

public void update(GameContainer container, int delta) {
    time += delta;
}

public void render(GameContainer container, Graphics g) {
    g.drawString("Time : " + time/1000, 100, 100);

    // if the current time has passed the deadline, do something
    if(time > deadline){
        int min = 2;
        int max = 3;
        deadline = time + ((min + (int)(Math.random() * ((max - min) + 1))) * 1000); // reset the interval timer

        // draw the image
        int x = 100;
        int y = getRandomNumberFromArray(); // this is the method I provided in my first part of the answer
        Image img = new Image("path/file.png");
        g.drawImage(img, x, y) // image file, x, y
    }
}

このコードは、ランダム インターバル タイマーとして機能する期限を作成します。期限は、現在の時刻の合計であり、それに 2 ~ 3 の数値が加算されます (時刻はミリ秒単位であるため、1000 が乗算されます)。現在の時間がこの期限を超えると、ランダムな画像が作成されます。

複数の画像を表示する方法については、以前にリンクされたチュートリアルを参照してください。これは、ArrayList 内の画像を追跡することで実現できると思います。次に、render() メソッドでこれらの画像をすべてレンダリングします。しかし、私は Slick2D のいくつかの基本しか知らないので、よくわかりません。

私はこれをテストしていませんが、正しい方向に向けられたことを願っています.

更新 2

コメントの推奨事項については、これがそれを実装する方法になります。

ArrayList<DrawnImage> images; // make sure you initialize this at the beginning as: images = new ArrayList<Image>();
int time;
int deadline; // initialize this somewhere in the start of your game

public void update(GameContainer container, int delta) {
    time += delta;
}

public void render(GameContainer container, Graphics g) {
    g.drawString("Time : " + time/1000, 100, 100);

    // if the current time has passed the deadline, do something
    if(time > deadline){
        int min = 2;
        int max = 3;
        deadline = time + ((min + (int)(Math.random() * ((max - min) + 1))) * 1000); // reset the interval timer

        // draw the image
        int x = 100;
        int y = getRandomNumberFromArray(); // this is the method I provided in my first part of the answer
        images.add(new DrawnImage(new Image("path/file.png"), x, y));

        for(DrawnImage di : images){
            g.drawImage(di.image, di.x, di.y); // image file, x, y
        }
    }
}

DrawnImage クラス

public class DrawnImage {
    public Image image;
    public float x;
    public float y;

    public DrawnImage(Image image, float x, float y){
        this.image = image;
        this.x = x;
        this.y = y;
    }
}
于 2013-10-29T22:30:53.420 に答える
0

タイマーはまったく必要ありません。

while (true) {
    Thread.sleep(x); //x is the number of milliseconds you want the computer to wait for
    int y = Math.random() * array.length;  //array is the name of the array
    //Create your new image, with y-value as array[y]
}
于 2013-10-29T22:18:47.973 に答える