使用计划功能更新精灵位置

时间:2013-12-16 10:31:59

标签: c++ sprite cocos2d-x

在我的游戏中,我有一个动画精灵。我在我的游戏中添加了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(显然不再起作用)

提前致谢

1 个答案:

答案 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派生的对象。

这有用吗?