簡體   English   中英

適用於Android的Java中的多個移動精靈

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM