0
我有一個播放器類,有MoveUp
,MoveLeft
和MoveRight
的功能。
在MainScene.cpp
(我唯一的場面至今),我有一個聽衆使用鍵盤聽衆的移動播放器
auto keyboardListener = EventListenerKeyboard::create();
keyboardListener->onKeyPressed = CC_CALLBACK_2(MainScene::keyPressed, this);
keyboardListener->onKeyReleased = CC_CALLBACK_2(MainScene::keyReleased, this);
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(keyboardListener, this);
另外,我有一個指針player
,通過
this->player = rootNode->getChildByName<Player*>("Player1");
還定義了,我有功能keyPressed
和keyReleased
in MainScene
。
在keyPressed
功能,我是調度功能與是否是:
if (keyCode == cocos2d::EventKeyboard::KeyCode::KEY_D) { schedule(schedule_selector(MainScene::MoveRight)); }
但是有一個問題,當我試圖做同樣的事情與對象而不是精靈,並與位於分隔的類的功能,而不是內部的相同的文件。
如果我嘗試在MainScene::keyPressed
運行這樣的代碼:
if (keyCode == cocos2d::EventKeyboard::KeyCode::KEY_W) { this->player->MoveLeft(5); }
,只是每個按鍵(我希望它移動,直到我釋放鍵),如果我嘗試安排,或做一次player
移動像這樣的東西,它不工作或有錯誤。
我試圖做一些與CallFunc
和CCCallFunc
,但似乎沒有任何工作。
你能幫我嗎? :)
但是你的解決方案似乎不太理想,因爲更新函數將不得不檢查每個幀的每個關鍵幀。還有更多的寫作,因爲每個動作都需要一個布爾值 – Sagittario
update()在每一幀都被調用,只是檢查布爾值不會真的增加幀渲染時間,除非你有數百萬個渲染時間(但GPU不會反正這麼多)。另外爲什麼要檢查每個密鑰?你只是聽聽鍵盤事件,當事情發生變化時,你正在更新「玩家」信息(正在移動,移動的方向和其他東西)。這就是我認爲應該完成的事情 - 玩家應該爲自己「照顧」自己,任何移動邏輯都應該放在自己身上。如果你有不同類型的對象要移動,你應該創建具有通用數據的類,其他人將擴展它。 – Makalele