使用键盘监听器移动播放器
Moving player using keyboard listeners
我有一个播放器 class,具有 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");
此外,我在 MainScene
中有一个函数 keyPressed
和 keyReleased
。
在 keyPressed
函数中,我使用 if 调度函数:
if (keyCode == cocos2d::EventKeyboard::KeyCode::KEY_D) { schedule(schedule_selector(MainScene::MoveRight)); }
但是有一个问题,当我试图用对象而不是精灵和位于不同 class 的函数做同样的事情时,而不是在同一个文件中。
如果我尝试 运行 在 MainScene::keyPressed
:
中编写这样的代码
if (keyCode == cocos2d::EventKeyboard::KeyCode::KEY_W) { this->player->MoveLeft(5); }
、player
每次按键只移动一次(我希望它移动直到我释放那个键),如果我尝试安排它或做类似的事情,它不起作用或那里是错误。
我尝试用 CallFunc
和 CCCallFunc
做点什么,但似乎没什么用。
请你帮助我好吗? :)
为什么不在 Player class 中创建方法 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?
呼叫他们
我有一个播放器 class,具有 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");
此外,我在 MainScene
中有一个函数 keyPressed
和 keyReleased
。
在 keyPressed
函数中,我使用 if 调度函数:
if (keyCode == cocos2d::EventKeyboard::KeyCode::KEY_D) { schedule(schedule_selector(MainScene::MoveRight)); }
但是有一个问题,当我试图用对象而不是精灵和位于不同 class 的函数做同样的事情时,而不是在同一个文件中。
如果我尝试 运行 在 MainScene::keyPressed
:
if (keyCode == cocos2d::EventKeyboard::KeyCode::KEY_W) { this->player->MoveLeft(5); }
、player
每次按键只移动一次(我希望它移动直到我释放那个键),如果我尝试安排它或做类似的事情,它不起作用或那里是错误。
我尝试用 CallFunc
和 CCCallFunc
做点什么,但似乎没什么用。
请你帮助我好吗? :)
为什么不在 Player class 中创建方法 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?
呼叫他们