2014-02-13 47 views
4

我該如何控制播放器的速度?我使用了運動didSimulatePhysics()方法:控制我的遊戲速度?

if(([self childNodeWithName:@"hero"].position.x >= 180) 
    && 
    (self.touchedHero == YES) 
    && _canMove ==YES){ 

    [[self childNodeWithName:@"hero"]setPosition:CGPointMake(180, [self childNodeWithName:@"hero"].position.y)]; 

    [self.world setPosition:CGPointMake(self.world.position.x-5, self.world.position.y)]; 

但這種方法依賴於設備性能和iOS設備的速度很不穩定上運行我的應用程序時,有時走得非常快有時慢下來,我怎樣才能控制這個速度?

回答

0

你會想考慮(或不考慮)幀率獨立性,或者改變你構造遊戲或物理計算的方式。更重要的是,這可能是開始消除你的代碼主要低效的好時機......這是一個問題「啓動」清單要問自己:

  • 你如何組織你的對象?你是否只是遍歷所有事物,並對所有事物進行物理計算和碰撞檢測,而不考慮會使這些計算不必要的條件?
  • 您是將對象分區到空間樹中,還是循環遍歷所有對象(最重要的是用於碰撞檢測)?
  • 你有多少個物體?你需要多少?可以從遊戲中刪除任何東西而不犧牲您所需的用戶體驗?
  • 您是否正在執行離屏對象的物理計算?
  • 任何物理或邏輯計算中的任何嚴重的算法缺陷?任何可以改善數量級的東西?
  • 您是否以合理的方式存儲對象?不如上述項目立即生效,但您可以考慮以對象池爲例。
  • 您是否正在使用任何可以用昂貴的循環體內的C代碼替換的Objective-C代碼? (C函數調用在2個CPU週期內執行,而ARC中的Objective-C消息在9個週期內執行 - 這不是你應該看的第一件事情,但值得考慮的事情是,4.5倍的加速並不是太簡單處理很多對象 - 但這可能不是你的瓶頸)。

This good post on learn-cocos2d.com在考慮iOS的情況下詳細介紹了FPS問題。

This good post on gafferongames.com詳細介紹了處理時間步更新的各種方法。一個有趣的閱讀,但你會希望先看看你的數據結構&算法首先爲任何明顯的東西,然後才佔用你的時間步。