私は現在、Eclipse で Java を使用して Android 用のゲームを作成しています。画面上で複数のスプライトを一度に移動する際に問題が発生しています。これまでに行ったことを示すコードをいくつか示します。
ゲーム内のスレッドの run メソッドを次に示します。onDraw メソッドを呼び出して、画面にスプライトを描画します。これらは両方とも、SurfaceView を拡張し、Runnable を実装するクラスにあります。
public void run() {
long ticksPS = 1000 / FPS;
long startTime;
long sleepTime;
while (running) {
Canvas c = null;
startTime = System.currentTimeMillis();
try {
c = getHolder().lockCanvas();
synchronized (getHolder()) {
onDraw(c);
}
} finally {
if (c != null) {
getHolder().unlockCanvasAndPost(c);
}
}
sleepTime = ticksPS-(System.currentTimeMillis() - startTime);
try {
if (sleepTime > 0)
Thread.sleep(sleepTime);
else
Thread.sleep(10);
} catch (Exception e) {}
}
}
これがonDrawメソッドです。リズムゲームのように、フレットボタンが左右下に2つずつあります。そして、私がやろうとしているのは、上部に表示されて下に移動する「バッドフレット」を作成することです. このコードの一部は他のプログラムから一緒にパッチされており、一部は私自身のものです。
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.CYAN);
badguy = true;
if(badguy == true){
if(switch_sides = true){
badfret1.move(canvas,30,40);
badfret1.update(canvas);
}
if(switch_sides = false){
badfret2.move(canvas,500,40);
badfret2.update(canvas);
}
}
fret1.update(canvas);
fret2.update(canvas);
}
これは、質問に最も適していると感じた badfretSprite クラスのコードです。badfretSprite クラスは、私が作成した上位の Sprite クラスを継承しています。
Bitmap bmp;
int xSpeed = 0;
int ySpeed = 5;
public badfretSprite(GameView gv, int x1, int y1) {
super(gv, x1, y1);
this.bmp = gv.getFret();
}
public void move(Canvas canvas,int xpos,int ypos) {
x = xpos;
y = ypos;
x+=xSpeed;
y+=ySpeed;
canvas.drawBitmap(bmp, x,y, null);
}
そのため、現時点ではスプライトが 1 つだけ上部に作成され、移動しません。移動することはできましたが、移動したのは 1 つだけです。
他に見たいメソッドやコードのスニペットがあるかどうか尋ねてください。
public void update(Canvas canvas) {
move(canvas,xSpeed,ySpeed);
}