[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)」で取得する。
[javascript]
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]