【cocococococococococostutdio】各GUIコントロールのインタラクティブイベントをどうやって監督しますか?
3568 ワード
http://cn.cocos2d-x.org/tutorial/show?id=1947
前の記事では、新しいCocos Studioサポートが同時にwidgetと非Widgetタイプのノードを作成することを紹介しました.本稿では主にwidgetタイプのイベントを紹介します.
すべてのWidgetタイプのノードは、addTouch EventListenerとaddClickEventListenerの2つのインターフェースをサポートしています.タッチイベントは、いくつかのインターフェースを介して受信することができます.
addTouch EventListenerの使用手順は以下の通りです.
1)あなたのWidgetノードを用意して、エディタでインタラクションを開始します.
2)関数を定義します.形式は以下の通りです.
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の同名関数を以下のコードに置き換えます.
addTouch Event Listenerに似ています.
1.インタラクティブまたはset Touch Enbaled(true)を設定する
2.待ち受け関数を作成する:
ソースアドレス:http://www.cocoachina.com/bbs/read.php?tid=270804&page=1&toread=1#tpc
前の記事では、新しい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.タッチイベントの座標はどうやって取得しますか?
以下のいくつかのインターフェースを使います.
2.SrollViewに関しては、場合によってはサブコントロールにドラッグできない問題があります.
現在のStudioはwidgetと非Widgetタイプのノードを同時に作成することをサポートしています.これは問題があります.
Widgetタイプは、タッチイベントを受けると、これらのイベントを上位に転送しますが、Widgetノードではない場合は停止します.これはSrollViewなどのView類のコントロール(両者の間にnodeがある)をクリックしてドラッグした場合、ドラッグに失敗します.
ソリューション:
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