#tmlib.js Advent Calendar 12/4分
以前引っ掛かって結構な時間悩んだ挙句に、phiさんに質問したら速攻回答頂いた件があるので覚書。
しょぼくて申し訳ありません(汗)
##本題
tmlibでゲーム作ってると、オブジェクトをタッチした時になんらかの処理をさせたくなる時があります。
そういう時は…
app.currentScene.ontouchstart = function(e) {
for (var i = 0; i < obj.length; i++) {
if (obj[i].isHitPoint(e.pointing.x, e.pointing.y)) {
//タッチしたので良い感じの処理
obj[i].hogehoge();
}
}
}
という面倒な処理を書きがちです(少なくとも私は)
全部配列に保存しなきゃだしめんどいなーと思ってたら、tmlibにはオブジェクトをタッチした時にイベント発火させる機能がありました。
var obj = tm.display.RoundRectangleShape(width, height, param).addChildTo(this);
obj.interactive = true;
obj.boundingType = "circle";
obj.checkHierarchy = true;
obj.on("pointingstart", hogehoge);
interactive
フラグをtrue
にするとタッチした時にイベント発火する様になります。
判定の種類(矩形、円形等)はboundingType
で指定。
click
イベントを使用した場合checkHierarchy
をtrue
にすると反応しなくなるのでtouchstart
、touchmove
、touchend
等を使用した方が良いらしいです(ここがハマったポイント)
親を持つ場合はcheckHierarchy
フラグをtrue
にしないと階層構造を考慮した判定が行われないので注意が必要です。
これでいちいちオブジェクトを配列に保存しなくてもタッチ判定が可能に!
##サンプル(runstant)
http://goo.gl/OW6C5H
runstant超便利