有基於文檔兩種方法,這兩者都是流行的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());
您將需要閱讀的文檔,看看你是否需要一個指針一個「遊戲」對象來調用時間表。不要緊,如果你這樣做就像「遊戲 - >時間表(..)」,而不是。
btw你如何使用gameplay3d的框架,如果他們不支持android studio。因爲我想用這個進行開發,但我無法弄清楚如何在android studio上進行編輯,並在build.xml文件被轉換爲gradle文件時進行編譯,因此我無法運行「ant debug install」它? –
是的你是對的,他們不支持android studio,但你仍然可以使用終端編譯android應用程序。 (我認爲Cocos2Dx是同樣的故事......)我們所做的:所有的測試和調試都是通過Xcode和iOS設備完成的......當一切似乎都沒問題時,我們會對Android進行一些小測試。 – huse
我也想到了那個。我想這是唯一的方法。 –