0

(イベント リスナーは別のクラスにあります) Game.render = true の場合、レーザー ビームのように見える一定の弾丸の流れが得られます。ギャップが必要です。私が言いたいのは、機関銃から発射されているかのように弾丸を生成したいということです。時間か何かを追加する必要があることはわかっていますが、必要な効果を得るためにそれを行う方法がわかりません。これを約1時間機能させようとしてきたので、どんな助けも大歓迎です。

import java.util.ArrayList;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;

public class Bullet {

// ArrayList
@SuppressWarnings("unchecked")
static ArrayList<Bullet> arrL = new ArrayList();

public Bullet(int x , int y) throws SlickException{



}

public static void update(GameContainer gc, int u) throws SlickException{

// when the left mouse button is clicked Game.fire = true, the key listener is in   another class
    if(Game.fire){

        Bullet b = new Bullet(5,5);
        arrL.add(b);
        reloaded = false;

    }   if(!reloaded){



    }           
}

public static void renderBullets(GameContainer gc, Graphics g, int x, int y) {

         // draws a new bullet for every 'bullet object' in  the ArrayList called arrL
        for(Bullet b : arrL){

            g.drawRect(x,y,10,10);
            x++;

        }
    }
}
4

2 に答える 2

4

この種の状況で私が最も頻繁に行うことは、時間変数を追加して、すべての更新からデルタ (u として持っている変数) を減算し、0 を下回る時点でリセットすることです。

// Set this to whatever feels right for the effect you're trying to achieve.
// A larger number will mean a longer delay.
private static int default_bullet_delay = 500;

private static int time = 0;

public static void update (GameContainer gc, int u) throws SlickException {
    time -= u;
    if (time <= 0 && Game.fire) {
        fireBullet();                 // Replace this with your code for firing the bullet
        time = default_bullet_delay;  // Reset the timer
    }

    // The rest of the update loop...
}

基本的に、Game.fire が true であっても、タイマーがカウントダウンするまで弾は発射されません。それが起こると、タイマーが設定され、タイマーが再びカウントダウンするまで次の弾丸は発射できません. これをかなり小さい値に設定すると、各弾丸の間に少し隙間ができるはずです。

于 2013-04-13T00:18:53.150 に答える