[英]Multiple moving sprites in Java for Android
我目前正在使用Java在Eclipse中為Android開發游戲。 我在屏幕上一次移動多個精靈時遇到問題。 這是一些代碼,向您展示我到目前為止所做的事情。
這是游戲中線程的運行方法。 它調用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);
}
因此,目前僅在頂部創建了一個精靈,該精靈不移動,我設法使其移動,但只有一個精靈移動了。
請詢問您是否還有其他想要查看的方法或代碼片段。
public void update(Canvas canvas) {
move(canvas,xSpeed,ySpeed);
}
您毫無意義地更新badFretSprites。
另外,您應該真正分離繪圖和更新邏輯,游戲循環應如下所示
synchronized (getHolder()) {
update();
onDraw(c);
}
update(){
for every object
object.update()
}
onDraw(){
for every object
object.draw()
}
因此,您僅應在update方法中更新位置,而僅在draw方法中進行繪制,一旦您的應用變得更加復雜,它將更易於管理,添加和調試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.