2013-12-16 22 views
0

在我的遊戲中,我有一個動畫精靈。我在我的遊戲中添加了box2d以增加重力。現在我想用計劃功能更新我的精靈位置。我用它的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'to member pointer type'coco2d :: sel_schedule'(aka void coco2d :: CCobject :: *)(float)

我不知道該怎麼做現在我嘗試了谷歌,但每個人都使用客觀的 - c或調度ule_selector提前

+0

你在哪個類中定義了schedule方法.. –

回答

1

你可能不應該使用日程安排功能更新單個精靈(這顯然不工作)

感謝。

在場景中的類,重寫虛方法更新(...):

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(); 
} 

這樣做,這樣給你什麼獲取更新的時候......你只有一個更新週期中調用一個函數明確的控制。

無論其,如果你真的想這樣做:

聲明這樣您的自定義更新:

void IntroScene::myUpdate(float dt) 
{ 
    CCLOG("Also called"); 
} 

安排這樣的:

schedule(schedule_selector(IntroScene::myUpdate), 1.0f); 

取消調度像這樣:

unschedule(schedule_selector(IntroScene::myUpdate)); 

** 注意 **據我所知,您只能「計劃」從CCNode派生的對象。

對您有幫助嗎?

+0

我按照你的建議嘗試了它,它的工作原理是:)。我不只是更新1個精靈。我想更新每個精靈。 Atm只有我的角色是一個動態的身體,雖然只有1個移動的精靈。 – Aelion

+0

很高興我能幫到你。你也可以看看這個:https://github.com/NonlinearIdeas/RotatedFixtureDemo – FuzzyBunnySlippers