我有一个玩家类,有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
和MainScene
。
在keyPressed
函数中,我使用if:
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
制作内容,但似乎没有任何效果
请你帮助我好吗? :)
答案 0 :(得分:1)
为什么不在Player类中创建方法startMoving()和stopMoving()? 像这样:
void Player::init(){
scheduleUpdate()
}
void Play::startMoving(){
isMoving = true;
}
void Player::stopMoving(){
isMoving = false;
}
void Player::update(float delta){
if(isMoving){
//move player here
sprite->setPositionX(sprite->getPositionX() + speed * delta);
}
}
然后从keyPressed / keyReleased调用它们?