我得到了一个名为CharacterAnimation
的类,它由一个虚拟方法组成:
CharacterAnimation : public cocos2d::CCObject {
public:
...
virtual void start(float td);
}
以及从it类继承的几个类:
CharacterAnimationBlink
CharactedAnimationDropTear
- 等等
我想要的是:
创建
std::map<std::string, CharacterAnimation*> animationsList;
填写
animationList
类:animationsList["blink"] = new CharacterAnimationBlink(1,2,3); animationsList["dropTear"] = new CharacterAnimationDropTear(1,2);
循环通过此std::map
对于每个
std::map
元素,调用this->schedule(schedule_selector(characterAnimationStartMethodPointer), Character::animationPeriod);
应该放置什么而不是currentAnimationStartMethodPointer
?如何从std::map
访问指向当前对象的start()
方法的指针?
来自CCObject.h
typedef void (CCObject::*SEL_SCHEDULE)(float);
...
#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)
假设您不控制schedule()
函数的声明,则无法获得指向特定CharacterAnimation
实例的start()
函数的单个指针。相反,这里需要两件事:一个成员函数指针,和一个指向应该调用该函数的实例的引用或指针。
正如您的问题中所述,看起来schedule()
需要一个成员函数指针(特别是CCObject
类中的一个函数)。您的CharacterAnimation
类继承自CCObject
,但指向CharacterAnimation::start()
的成员函数指针是而不是指向CCObject
函数的成员函数指示器,假设由于缺少virtual
或override
说明符,start()
是在CharacterAnimation
中声明的,而不是从CCObject
继承的。
使用此代码使全局调度程序每Character::animationPeriod
秒调用一次start
方法。
for (std::map<std::string, CharacterAnimation*>::iterator i = animationsList.begin();
i != animationsList.end();
++i)
{
CCDirector::sharedDirector()->getScheduler()->scheduleSelector(schedule_selector(CharacterAnimation::start),
i->second,
Character::animationPeriod,
false);
}