gpt4 book ai didi

c++ - 使用键盘监听器移动播放器

转载 作者:行者123 更新时间:2023-11-30 05:38:27 24 4
gpt4 key购买 nike

我有一个播放器类,具有MoveUpMoveLeftMoveRight 函数。
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 中有一个函数 keyPressedkeyReleased
keyPressed 函数中,我使用 if 调度函数:

if (keyCode == cocos2d::EventKeyboard::KeyCode::KEY_D) { schedule(schedule_selector(MainScene::MoveRight)); }

但是有一个问题,当我试图用对象而不是 Sprite 和位于不同类而不是同一个文件中的函数做同样的事情时。
如果我尝试在 MainScene::keyPressed 中运行这样的代码:

if (keyCode == cocos2d::EventKeyboard::KeyCode::KEY_W) { this->player->MoveLeft(5); }

, player 每次按键只移动一次(我希望它移动直到我释放那个键),如果我尝试安排它或做类似的事情,它不起作用或有错误。

我尝试用 CallFuncCCCallFunc 做点什么,但似乎没有任何效果。
请你帮助我好吗? :)

最佳答案

为什么不在 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 调用它们?

关于c++ - 使用键盘监听器移动播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32771389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com