在我的游戏中,我有一个动画精灵。我在我的游戏中添加了box2d以增加重力。现在我想使用schedule函数更新我的sprite的位置。我让它与Objective-C一起工作,但我希望它是一个多平台游戏,所以现在我在c ++中尝试它。
在我的初始化中,我有以下几行:
this->schedule(cocos2d::SEL_SCHEDULE(View::tick(1.0f)));
并且方法勾选:
void View::tick(float dt) {
world->Step(dt, 10, 10);
for(b2Body *b = world->GetBodyList(); b; b=b->GetNext()) {
if(b->GetUserData() != NULL) {
}
}
}
我在init中的行上出现以下错误:“无法从类型'void'转换为成员指针类型'coco2d :: sel_schedule'(又名void coco2d :: CCobject :: *)(float)
我不知道现在该做什么。我试图谷歌,但每个人都使用objective-c或schedule_selector(显然不再起作用)
提前致谢
答案 0 :(得分:1)
您可能不应该使用schedule函数来更新单个sprite。
在场景类中,覆盖虚拟方法以进行更新(...):
virtual void update(float dt)
{
CCLOG("This was called.");
// Do updates for everything in the scene you need to call on a tick.
}
此外,覆盖onEnter()和onExitTransitionDidStart()。在第一个中,调用scheduleUpdate来设置场景,以便在刻度线上自动调用。在第二个中,调用unscheduledUpdate(当场景正在退出时)以停止更新。
void IntroScene::onEnter()
{
CCScene::onEnter();
scheduleUpdate();
}
void IntroScene::onExitTransitionDidStart()
{
CCScene::onExitTransitionDidStart();
unscheduleUpdate();
}
这样做可以让你明确控制什么时候更新...你只有一个在更新周期中调用的函数。
HOWEVER ,如果你真的想这样做:
声明您的自定义更新程序:
void IntroScene::myUpdate(float dt)
{
CCLOG("Also called");
}
按照以下方式安排:
schedule(schedule_selector(IntroScene::myUpdate), 1.0f);
像这样取消安排:
unschedule(schedule_selector(IntroScene::myUpdate));
** 注意 **据我所知,您只能"安排"从CCNode派生的对象。
这有用吗?