2016-06-08 60 views
0

有人能寫一下如何使用這個Gameplay3D功能一個具體的例子:Gameplay3D遊戲:: TimeListener

virtual void gameplay::TimeListener::timeEvent ( long timeDiff, 
void * cookie 
)  [pure virtual] 

我的意思是想叫T毫秒後的功能,但我不知道我應該如何編寫代碼。

這裏是文檔: http://gameplay3d.github.io/GamePlay/api/classgameplay_1_1_time_listener.html

+0

btw你如何使用gameplay3d的框架,如果他們不支持android studio。因爲我想用這個進行開發,但我無法弄清楚如何在android studio上進行編輯,並在build.xml文件被轉換爲gradle文件時進行編譯,因此我無法運行「ant debug install」它? –

+0

是的你是對的,他們不支持android studio,但你仍然可以使用終端編譯android應用程序。 (我認爲Cocos2Dx是同樣的故事......)我們所做的:所有的測試和調試都是通過Xcode和iOS設備完成的......當一切似乎都沒問題時,我們會對Android進行一些小測試。 – huse

+0

我也想到了那個。我想這是唯一的方法。 –

回答

0

有基於文檔兩種方法,這兩者都是流行的C++模式,鼓勵鬆散耦合。

1.)聽者的方法。在這種方法中,你的類(比方說它叫做ObjectManager)也是'是',即從TimeListener繼承。這似乎是這個框架希望你去的方式。看看純虛擬基類「TimeListener」

2.)回調方法。這是第二次調用「遊戲::計劃」: http://gameplay3d.github.io/GamePlay/api/classgameplay_1_1_game.html#a3b8adb5a096f735bfcfec801f02ea0da 這需要一個腳本函數。我不熟悉這個框架,所以我不能評論它太多,你需要傳遞一個指針來匹配所需的簽名

總的來說,我會做這樣的事情:

class ObjectManager: public TimeListener 
{ 
public: 

void OnTimeEvent(long timeDiff, void* cookie) 
{ 
    // timeDiff is difference between game time and current time 
    // cookie is the data you passed into the event. it could be a pointer to anything. 
    // Cast appropriately. remember, it is completely optional! you can pass 
    // nullptr! 
    MyOtherObject* other = static_cast<MyOtherObject>(cookie); 
    // ... 
    // handle the event and do the other stuff I wanted to do on a timer. 
} 

// my other business logic and all other good stuff this class does. 

private: 
// data, other private things. 
} 

.... 

現在,當你想安排一個事件,你可以安排它要叫上你的聽衆:

ObjectManager myObjectManager; // example only, stack variable. would be invalid. 

// Schedule an event to be invoked on the instance noted, with a context of MyOtherObject, in 100 milliseconds. 
gameplay::Game::schedule(100.0, &myObjectManager, new MyOtherObject()); 

您將需要閱讀的文檔,看看你是否需要一個指針一個「遊戲」對象來調用時間表。不要緊,如果你這樣做就像「遊戲 - >時間表(..)」,而不是。

+0

我從TimeListener派生了類,然後創建了一個函數成員void timeEvent(long timeDiff,void * cookie),然後調用schedule(500,this,(void *)0); – huse

+0

當然,您可以傳遞void */null作爲cookie,這是可選的,供您使用。高效工作! – tmruss