[Cocos2d-x] ListViewの選択イベントの取得:Cocos2d-html

以下はCocos2d-html v3.xについて。基本は、C++版やCocos2d-JSでも同じ。

ポイント

ListViewに登録する各アイテム(UIウィジェット)で「setTouchEnabled(true)」をセットする。

「ListView#addEventListener(selector, target)」にイベントリスナーを登録。targetは、リスナー内のthisとなるオブジェクトを指定。

イベント発生時、登録した関数の引数には、第1引数に選択されたアイテムが、第2引数にイベントのタイプ(列挙)が渡される。

Cocos2d-xのイベントモデルだと、イベントリスナーを登録する際にイベントのタイプを指定できないので、ひとつのリスナーであらゆるイベントを受け取ってしまう。そこで「if (evtType != ccui.ListView.ON_SELECTED_ITEM_END)」というように、アイテムがタッチされたあとかチェックする。

「ListView#getCurSelectedIndex()」で選択されたアイテムのインデックスが取得できるので、そのオブジェクトが欲しい場合は「ListView#getItem(index)」で取得する。

var list = ccui.ListView.create();

for (var i = 0; i < 5; ++i) { var text = "sample " + i; var label = new ccui.Text; label.setFontSize(25); label.setString(text); label.tag = i; label.setTouchEnabled(true); } list.addEventListener(function(list, evtType) { if (evtType != ccui.ListView.ON_SELECTED_ITEM_END) return; var label = list.getItem(list.getCurSelectedIndex()); }); [/javascript]