【cocococococococococostutdio】各GUIコントロールのインタラクティブイベントをどうやって監督しますか?


http://cn.cocos2d-x.org/tutorial/show?id=1947
前の記事では、新しいCocos Studioサポートが同時にwidgetと非Widgetタイプのノードを作成することを紹介しました.本稿では主にwidgetタイプのイベントを紹介します.
すべてのWidgetタイプのノードは、addTouch EventListenerとaddClickEventListenerの2つのインターフェースをサポートしています.タッチイベントは、いくつかのインターフェースを介して受信することができます. 
addTouch EventListenerの使用手順は以下の通りです.
1)あなたのWidgetノードを用意して、エディタでインタラクションを開始します. 
2)関数を定義します.形式は以下の通りです.
void ACuteClass::onTouchEvent(cocos2d::Ref *ref, Widget::TouchEventType touchType)
{
    switch(touchType)
    {
    case Widget::TouchEventType::BEGAN:
        CCLOG("on began");
        break;
    case Widget::TouchEventType::MOVED:
        CCLOG("on moved");
        break;
    case Widget::TouchEventType::ENDED:
        CCLOG("on ended");
        break;
    case Widget::TouchEventType::CANCELED:
        CCLOG("on canceled");
        break;
    default:
        CCLOG("impossible");
    }
}
3)この関数をaddTouch EventListenerインターフェースに渡す: 
your_widget->addTouchEventListener(CC_CALLBACK_2(ACuteClass::onTouchEvent, this));//CC_CALLBACK_2   ,          。
okできます. 
addTouch EventListenerの使い方は同じです.異なるところは、コールバック関数ontouchEventは一回のタッチで一回だけリセットし、ENDEDをトリガした時にフィードバックします. 
クリックについては応答していない可能性があります. 
  • は相互作用を開けていません. 
  • コントロールがブロックされます. 
  •   
    その他の詳細 
    1.タッチイベントの座標はどうやって取得しますか? 
    以下のいくつかのインターフェースを使います. 
  • get Touch BeganPosition 
  • get Touch MovePosition 
  • get Touch EndPosition 
  • 名前を見れば、獲得したものが何かわかるでしょう. 
    2.SrollViewに関しては、場合によってはサブコントロールにドラッグできない問題があります. 
    現在のStudioはwidgetと非Widgetタイプのノードを同時に作成することをサポートしています.これは問題があります. 
    Widgetタイプは、タッチイベントを受けると、これらのイベントを上位に転送しますが、Widgetノードではない場合は停止します.これはSrollViewなどのView類のコントロール(両者の間にnodeがある)をクリックしてドラッグした場合、ドラッグに失敗します. 
    ソリューション: 
  • は、ViewのコントロールのSwallo Touches属性をfalseとして設定します.コントロールをタッチダウンさせない 
  • ソースを変更します.Widgetの同名関数を以下のコードに置き換えます.
  • void Widget::propagateTouchEvent(cocos2d::ui::Widget::TouchEventType event, cocos2d::ui::Widget *sender, cocos2d::Touch *touch)
    {
        Widget *widgetParent = nullptr;
        for(Node *p = this;widgetParent == nullptr;)
        {
            p = p->getParent();
            if(p)
            {
                widgetParent = dynamic_cast<Widget *>(p);
            }
            else
            {
                return;
            }
        }
        widgetParent->interceptTouchEvent(event, sender, touch);
    }
    イ:Text Field 
    addTouch Event Listenerに似ています. 
    1.インタラクティブまたはset Touch Enbaled(true)を設定する 
    2.待ち受け関数を作成する:
    void yourClass::textFieldEvent(Ref *pSender, TextField::EventType type)
    {
        switch (type)
        {
            case TextField::EventType::ATTACH_WITH_IME:
                CCLOG("      ");
                break;
            case TextField::EventType::DETACH_WITH_IME:
                CCLOG("      ");
                break;
            case TextField::EventType::INSERT_TEXT:
                CCLOG("     ");
                break;
            case TextField::EventType::DELETE_BACKWARD:
                CCLOG("      ");
                break;
            default:
                break;
        }
    }
    3.傍受設置: 
    yourTextField->addEventListener(CC_CALLBACK_2(yourClass::textFieldEvent, this));
    Cocosエンジン中国語の公式サイトでは、多くのCococosエンジン関連の開発者に向けて優秀な教程(Cococos 2 d-x/Cocococos 2 d-JS/Quick/Cocococos Studio)を募集しています.投稿は以下に送ってください[email protected].
     
    ソースアドレス:http://www.cocoachina.com/bbs/read.php?tid=270804&page=1&toread=1#tpc