2011-08-27 68 views
1

我剛剛發佈了一款應用程序,避免尖峯!在Android市場上。 我的一些朋友已經下載了他們的手機/平板電腦上的應用程序,並且我被告知它運行得太快。它在我的機器人(HTC Dream)上運行得很好。有什麼方法可以告訴它在某些機器人上運行得多快,以及如何相應地調整它?我已經搜索到了很高和尚未找到答案。我的應用程序在某些Android設備上運行得太快

+1

我有點困惑:定義*運行速度太快*更好的細節。幀頻是否不正確?計時器是否比它應該更早結束?算法花費的時間比他們應該少嗎?什麼運行得太快? – Femi

回答

2

聽起來像你的應用程序是一個遊戲?如果是這樣,你可能有一個遊戲循環,儘可能快地運行遊戲。我發現這篇文章關於實現遊戲循環非常有用:Game Loops,當時我創建了我的遊戲,其中涉及時間。

+0

謝謝。這正是我需要的。 – Mike

+0

不客氣。 – C0deAttack

5

我已經在Android Market上看到您的遊戲並試用過它。

你不能真正確定最小和最大速度,你會獲得現有的各種硬件,如:

  • 新的硬件每天
  • 出現在市場上在一個給定的硬件,其他因素也可能影響你的應用的執行速度。

你應該做的是讓你的遊戲獨立於幀速率。爲此,請避免每次更新位置時使對象移動一段固定的距離。優先讓他們移動固定距離一段時間

爲此,請測量每次更新對象位置後自上次更新以來所經過的時間,並計算相應移動的距離。

這樣,根據硬件的質量,這些物體會跳起或移動很好,但至少他們會以相同的速度這樣做,並且這個速度將由您決定。當你在一臺全新的機器或舊機器上玩FPS遊戲時,這有點相同:運動的速度是恆定的,只有幀率不是。在舊機器上,你會有物體跳躍的印象,而在新的機器上它們會優雅地移動,但它在兩種情況下都能正常工作(當然,對於舊機器,當然也有一定的限制)。一臺機器永遠不會這麼快。

給你一些僞代碼,用於傘兵從上方落下到屏幕的底部:

  • 這是環路避免:

    while (playing) { 
        update_positions(); 
        display(); 
    } 
    
    update_positions() { 
        paratrooper.y -= 10; // the paratrooper's altitude decreases of 10 at each update 
    } 
    

在慢速硬件上,需要花費數小時才能穿越屏幕。在一個快速的硬件上,這將會太快,你甚至不會看到傘兵下降。

  • 這是應該做的正確方法:

    while (playing) { 
        update_positions(); 
        display(); 
    } 
    
    update_positions() { 
        time_elapsed = getSystemTimeInMS() - lastUpdateTimeInMS(); 
        paratrooper.y -= 0.01 * time_elapsed; // the paratrooper's altitude decreases of 10 per second 
    
        setLastUpdateTimeMS(getSystemTimeInMS()); // This way it includes the calculation time 
    } 
    

一個緩慢的硬件,跨越整個屏幕可能需要15個顯示器,而在快速的硬件,將採取45個上顯示,但在每個情況下你的傘兵以每秒10次的速度下降。

+1

謝謝。這幫助了很多。 – Mike

+0

不客氣@Mike!享受制作遊戲! – Shlublu

相關問題