按下按钮时旋转精灵

时间:2014-05-08 08:31:23

标签: c++ cocos2d-x

我是cocos2d-x的新手,现在我正在使用cocos2d-x在xcode中开发游戏。在我的游戏中,我希望我的精灵在按下按钮时旋转,但它在按钮释放时旋转。以下是我使用的代码。请帮我找到这个。

CCMenuItemImage *rotate = CCMenuItemImage::create(
                                                      "rotateround.png",
                                                      "rotateround.png",
                                                      this,
                                                      menu_selector(PlayScene::rotate) );
rotate->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 70,70) );

void gamescene::rotate()
{    
anim1=CCAnimation::create();
anim1->addSpriteFrameWithFileName("rotate.png");
anim1->addSpriteFrameWithFileName("rotate1.png");
anim1->addSpriteFrameWithFileName("rotate2.png");
anim1->addSpriteFrameWithFileName("rotate3.png");
anim1->addSpriteFrameWithFileName("rotate4.png");
anim1->setLoops(3);
anim1->setDelayPerUnit(0.7f);
man->runAction(CCAnimate::create(anim1));
}

1 个答案:

答案 0 :(得分:1)

这是CCMenu及其项目的工作方式 - 当用户释放触摸时,您将获得回调。如果您想要检测用户何时触及,则应使用CCControlButton

示例:

    CCControlButton *gzk = CCControlButton::create(CCScale9Sprite::create("res/FB.png"));
    gzk->setAdjustBackgroundImage(false);
    gzk->setTag(TAG_FB);
    gzk->setPosition(ccp(31, 517));
    gzk->addTargetWithActionForControlEvents(this, cccontrol_selector(MyClass::touch), CCControlEventTouchDownInside); // this line is the most interesting for you
    addChild(gzk, 10);

在示例中,当用户触摸按钮时将调用回调。 CCControlButton通常更好 - 您可以addTargetWitchAction针对具有不同回调的不同事件。

编辑:跟进评论 - “现在它继续旋转,即使我释放按钮。在释放按钮时停止动作。”

这是因为您在按下按钮时会执行操作,但不会以任何方式绑定它。这意味着您必须特别添加另一个操作并回调您的按钮,例如:

gzk->addTargetWithActionForControlEvents(this, cccontrol_selector(MyClass::endTouch), CCControlTouchUpInside);
gzk->addTargetWithActionForControlEvents(this, cccontrol_selector(MyClass::endTouch), CCControlTouchUpOutside);

endTouch()看起来应该是这样的:

void MyClass::endTouch() {
    man->stopAllActions(); //to stop all actions running on a node
    ------ or ------
    man->stopAction(anim1); //if you kept the reference to the action
    ------ or ------
    man->stopActionbyTag(tag); // if you assigned a tag to your action
}

希望这有帮助!