私はプラットフォーム ゲームを書いており、タイルを通常とは異なる方法でレイアウトすることにしました。各タイルを独自のオブジェクトにする代わりに、ブロックの各タイプを表す 1 つのオブジェクトを作成し、そのブロックをタイル マップ配列に複数回配置しました。問題は、ブロックでタイル更新メソッドを呼び出すと、マップ上のすべてのブロックで更新メソッドが呼び出されることです。だから今私がしたことは、更新メソッドにタイルの座標を渡したことです。ここに問題があります。更新メソッドは 1 秒間に数回呼び出されますが、ブロックの更新アクションを 3 秒ごとに実行したいだけです。どうすればこれを達成できますか。一時的な解決策を見つけましたが、乱数を使用して更新アクションを実行する必要があるかどうかを判断するとうまくいきません。これが私の現在の更新方法です。各ブロックを独自のインスタンスにすることはできません。
Random random = new Random();
public void update(int x, int y, boolean inRange)
{
if(random.nextInt(1000)==0)
{
double playerX = (panel.getCharacter().getX()+panel.getCharacter().getX()+panel.getCharacter().getWidth())/2;
double playerY = (panel.getCharacter().getY()+panel.getCharacter().getY()+panel.getCharacter().getHeight())/2;
int dispenserX = x*Block.WIDTH;
int dispenserY = y*Block.HEIGHT;
Point2D.Double player = new Point2D.Double(playerX, playerY);
Point2D.Double dispenser = new Point2D.Double(dispenserX, dispenserY);
double angle = calcAngle(dispenser, player);
panel.addEntity(new EntityFireball(x*Block.WIDTH,y*Block.HEIGHT,angle,1));
Music.playWav("dispenser");
}
}