느슨한 결합을 장려 모두 인기있는 C++ 패턴이있는 문서에 따라 두 가지 방법이있다.
1) 리스너 접근법. 이 접근 방식에서 클래스 (ObjectManager라고 가정 해 봅시다)도 TimeListener를 상속받습니다. 이것은이 틀이 당신이 가고 싶어하는 방식 인 것 같습니다. 순수 가상 기본 클래스 "TimeListener"를 살펴보십시오.
2) 콜백 방식. 이것은 "game :: Schedule"에 대한 두 번째 호출입니다. 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 android studio를 지원하지 않는 경우 어떻게 gameplay3d의 프레임 워크를 사용하고 있습니까? 왜냐하면 내가 개발하고 싶었지만 android studio에서 편집하는 방법을 알아낼 수없고 build.xml 파일이 gradle 파일로 변환되면 빌드 할 수 없기 때문에 "ant debug install"을 실행할 수 없습니다. 어떻게 수행 했습니까? 그것? –
예, 맞습니다. Android Studio를 지원하지 않지만 터미널을 사용하여 Android 앱을 컴파일 할 수는 있습니다. (나는 Cocos2Dx가 같은 이야기라고 생각한다.) 우리가하는 일 : 모든 테스트와 디버깅은 Xcode와 iOS 장치를 통해 이루어진다. 모든 것이 괜찮은 것처럼 보이면 Android에서 사소한 테스트를한다. – huse
나는 또한 그것을 생각했다. 나는 그것이 유일한 방법이라고 생각한다. –