[cococos 2 d-x 3.3]cocostudioのButtonボタンが2回のコールバック関数をトリガする問題解決
4140 ワード
先週、ある手遊び会社に入社したばかりで、主管大神の要求に応じてページuiの編集を開始し、buttonを追加する際に問題を発見しました.最初のbuttonボタンは、1回の関数の追加をコールバックしますが、その後は1回のコールバックを2回クリックします.
問題はuiのボタンがbuttonイベントを統合し、ボタンをクリックすると統合されたイベントソリューションが実行されます.ボタンのイベントにイベントタイプを追加する選択です.
コードは次のとおりです.
uiのButtonuを取得してコールバック関数を実行し、パラメータにイベントタイプ選択を追加
アニメーションを繰り返し再生
レイヤーの非表示を設定
cocostudioでのloardingbarの使用
問題はuiのボタンがbuttonイベントを統合し、ボタンをクリックすると統合されたイベントソリューションが実行されます.ボタンのイベントにイベントタイプを追加する選択です.
コードは次のとおりです.
auto rootNode = CSLoader::createNode("MainScene.csb");
rootNode->setTag(111);
addChild(rootNode);
新しく出たcocosエンジンv 1.0 PreView集積のcocostudioは編集したuiインタフェースを直接生成することができる.csbファイルをxcodeエンジニアリング(6以上)に公開 auto common_silver=static_cast<:button>(rootNode->getChildByTag(12)->getChildByTag(13)->getChildByName("Button_5"));
common_silver->addTouchEventListener(this, toucheventselector(HelloWorld::touchEvent));
uiのButtonuを取得してコールバック関数を実行し、パラメータにイベントタイプ選択を追加
void touchEvent(Ref *pSender, TouchEventType type);
void HelloWorld::touchEvent(Ref *pSender, TouchEventType type)
{
switch (type)
{
case TOUCH_EVENT_BEGAN://
if (silvercount>=2000)
{
//
auto label=(Label*)getChildByTag(111)->getChildByTag(12)->getChildByTag(13)->getChildByTag(116);
count+=10;
label->setString(StringUtils::format(" %d%%",count));
silvercount-=2000;
auto label2=(Label*)getChildByTag(111)->getChildByTag(115);
label2->setString(StringUtils::format("%d",silvercount));
}
else
{
auto msg_toast_bg=Sprite::create("res/iphone/msg_toast_bg.png");
this->addChild(msg_toast_bg);
msg_toast_bg->setPosition(320,400);
auto msg_toast_label=Label::createWithSystemFont(" ", "", 30);
msg_toast_bg->addChild(msg_toast_label);
msg_toast_label->setPosition(320,25);
msg_toast_bg->runAction(MoveTo::create(2, Point(320 ,600)));
msg_toast_bg->runAction(Sequence::create(FadeIn::create(1),FadeOut::create(0.1f ),NULL));
msg_toast_label->runAction(Sequence::create(FadeIn::create(1),FadeOut::create(0.1f ),NULL));
// msg_toast_bg->runAction(Sequence::create(MoveTo::create(2, Point(320,600), CallFunc::create( HelloWorld::jump(), this) ), NULL));
//msg_toast_bg->runAction(Sequence::create(MoveTo::create(2, Point(320,600)),CallFunc::create(this, callfunc_selector(this,(HelloWorld::jump()))),NULL));
break;
}
}
}
アニメーションを繰り返し再生
mowangb->runAction(RepeatForever::create(Sequence::create(ScaleTo::create(2, 1.05), ScaleTo::create(2, 1),NULL)));
msg_toast_bg->runAction(MoveTo::create(2, Point(320 ,600)));
レイヤーの非表示を設定
panle->setVisile(false);
panle->setVisible(true);
ループイベント0.05毎に実行this->schedule(schedule_selector(Helloworld::hplogic),0.05);
エスケープ文字% label2->setString(StringUtils::format("%d",silvercount));
イベントの一時停止と有効化if (panelGold->isVisible()){
Director::getInstance()->getEventDispatcher()->pauseEventListenersForTarget(this);
}else{
Director::getInstance()->getEventDispatcher()->resumeEventListenersForTarget(this);
}
cocostudioでのloardingbarの使用
void HelloWorld::hpLogic(float t)
{ hp++;
CCLOG("%d",hp);
if (hp>=100) {
hp=0;
}
auto loadingBar_left_to_right=static_cast<:loadingbar>(getChildByTag(111)->getChildByName("LoadingBar_1"));
loadingBar_left_to_right->setPercent(hp);
}