2012-06-26 75 views
0

我是Android遊戲開發新手,我開始了一個簡單的遊戲,Droid可以跳過傳入的框。 我想(只是在屏幕上簡單的點擊)叫我droid.jump()與一的onTouchEvent表面視圖方法安卓遊戲中的跳轉方法

我創建了一個名爲Droid的類:

public class Droid { 


// Log Tag for Debugging 
public static final String LOG_TAG = "_1Projekt"; 

private Bitmap bitmap; // the actual bitmap 
private int x; // the X coordinate 
private int y; // the Y coordinate 
private boolean touched; // if droid is touched/picked up 
private Speed speed; // the speed with its directions 

private long mLastTime; 

public Droid(Bitmap bitmap, int x, int y) { 
    this.bitmap = bitmap; 
    this.x = x; 
    this.y = y; 
    this.speed = new Speed(); 
} 

... ... ...

而jump()方法是我的問題。我想有一個平穩的跳躍,但我不知道如何用當前系統時間來計算。 我的想法是,機器人應該更新它在每個時間週期的位置,並且應該以一個較快的速度開始,然後將它降低到0以獲得平穩的跳躍。 但我不知道如何在我的while循環中計算這個值。 我現在的跳躍():

public void jump() { 
    Log.d(LOG_TAG, "Jumping"); 
    long now = System.currentTimeMillis(); 
    int elapsedTime = 100; 
    int jump = y-30; 

    while(y > jump) 
    { 
     if(System.currentTimeMillis() > now + elapsedTime) 
     { 
     now = now + elapsedTime; 
     elapsedTime -=3; 
     y = y-1; 
     } 
    } 
} 

就知道我只執行跳轉的「向上」的一部分。 謝謝你的回答!問候DroidDude

+0

也許設置一個標誌,當你的機器人達到最大高度,然後重新使用你的循環,但降低高度。 – Mualig

回答

0

你可能想看看here(第三後):

主循環之前,有

//Get the current time 
timeStep = System.currentTimeMillis(); 

然後做你的東西。然後在循環開始之前,有

// Hold to lock at FPS 
while(System.currentTimeMillis()-timeStep < 1000/60); 

其中60是每秒運行的幀數。

此方法還可以讓您獲得 while循環之後的時間差異,以瞭解渲染一個 幀需要多少時間。使用這個,你可以有一個變量,你可以乘你所有增量的所有 來獲得幀獨立速度。

例如,如果您將所用的毫秒數除以 來處理該幀16.666,那麼當程序 以大約60 FPS運行時,該數字將等於1。當幀速率較低時,需要更多 毫秒來渲染幀,並且該因子變大。

但是,一定要在重畫之前進行重畫。這也是視頻遊戲 的計時方式。我的視頻遊戲基本小程序代碼 在JAVA下顯示了一個示例。

+0

這不符合我的假設。我想知道如何獲得實際的幀速率。我需要的是在跳躍期間減少加速度。 – droiddude