Есть два подхода, основанные на документации, которые являются как популярные модели 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());
Вам нужно будет читать документы, чтобы увидеть, если вам нужен указатель объект «Игра» для вызова расписания. Неважно, если вы это сделаете, это будет просто «game-> Schedule (..)» вместо этого.
Кстати, как вы используете фреймворк gameplay3d, если они не поддерживают андроид-студию. Поскольку я хотел развиваться с этим, но я не могу понять, как редактировать на студии android и строить, если файлы build.xml преобразуются в файлы gradle, и поэтому я не могу запустить «ant debug install», как вы это делали Это? –
Да, вы правы, они не поддерживают андроид-студию, но вы все равно можете скомпилировать приложения для Android с помощью терминала. (Я думаю, что Cocos2Dx - это одна и та же история ...) Что мы делаем: все тестирование и отладка выполняется с помощью устройств Xcode и iOS ... когда все кажется ОК, мы выполняем небольшие тесты на Android. – huse
Я тоже думал об этом. Думаю, это единственный способ. –