2014-04-29 55 views
0

讓我們假設我想用一個簡單的對象在屏幕上製作一個安卓遊戲。該對象以x = 0開始,並在x =屏幕右側結束。如何在設定的時間內將遊戲對象從一側移動到屏幕的另一側?

讓我們也假設我們生活在一個完美的世界,每個設備的運行速度恰好爲30 FPS。我當然可以使用下面的代碼片段從點「0」到「屏幕的右側」,但由於存在碎片,它絕對會在每個設備上花費可變的時間量。

while(x < rightSideOfScreen) 
x++; 

唯一的座標系我所知道的是android.graphics.Point,這正是我目前使用我的比賽。

  1. 有沒有更好的方法來管理2D遊戲座標?
  2. 如何讓簡單的遊戲對象在所有設備上的相同時間內從點「0」到達「屏幕右側」?
+0

您需要記住起始點的時間戳,然後在每個'onDraw'中根據當前時間和視圖寬度計算x座標。例如,在我的設備上,每12-20毫秒就會調用一次onDraw,而且與60fps相關,而不是30 –

回答

0
  1. 取決於您的要求。如果你的遊戲包含這樣一個對象在不斷的時間內從左向右移動,那麼這可能就是你所需要的。如果你正在做3D FPS拍攝,你可能想看看matricesquaternions等。在中間有引擎和庫可以幫助你,如libgdx

  2. 下面是一些代碼(未測試):

[...]

long animationStartTime=System.currentTimeMillis(); 
final long CONSTANT_LEFT_TO_RIGHT_TIME = 10*1000;//10 seconds in millis 

@Override 
protected void onDraw(Canvas canvas) { 
    final long now = System.currentTimeMillis(); 
    final int w=canvas.getWidth(); 
    final long timePassed=now-animationStartTime; 
    final int x=(timePassed*w)/CONSTANT_LEFT_TO_RIGHT_TIME; // Calculate position deterministically based on time since animation start 
    canvas.drawBitmap(myObjectBitmap, x , 100, null); 
    //Just for fun, loop the animation 
    if(x>w){ 
     animationStartTime=now; 
    } 
} 
0

使用插值我想:

targetX = rightSideOfScreen; 


x += (targetX - x) * 0.08f * delta * FPS; 

玩的0.08 f值

上面我的示例中使用了你正在談論的「完美世界」。通過將運動與render()方法中傳遞的增量相乘,可以確保它在所有設備上運行相同。

相關問題