RPGツクール素材メモ とかティラノスクリプトの話とか

同人RPGの制作で役立ちそうなスクリプト・プラグイン素材を書き留めておく

pixi.jsで多角形のクリックを判定する

pixi.jsでContainerを作り、clickやmousedownを試して、おお良いじゃん…でもこの当たり判定ってコンテナーの大きさに縛られちゃうの?
って思ってる人向けメモ(自分)


結論。
hitAreaというプロパティに図形を入れれば、その形に沿ってクリック判定を行ってくれる。
図形はRectangleで四角、Circleで円、そしてPolygonなら多角形さえも可能になる。

こんな感じ。

/*
	定番の
	var stage = new PIXI.Container();
	renderer.render(stage)
	とかがあるものとする
*/

// 当たり判定
var poly = new PIXI.Polygon(
    new PIXI.Point(0,250) ,
    new PIXI.Point(170,280),
    new PIXI.Point(400,580),
    new PIXI.Point(600,700));
var graphics = new PIXI.Graphics();
graphics.interactive = true;
graphics.buttonMode = true;
graphics.hitArea = poly;
// 描写
graphics.lineStyle(5,0xF00000);
graphics.drawShape(poly); // graphics.drawPolygon(poly)でも可
stage.addChild(graphics);
//
graphics.mousedown = function(data){
      alert('sasdfsdf');
};

f:id:gamecome:20151203084427j:plain

多角形の当たり判定をセット、また多角形状にラインを描写している。
これで「多角形の内部をクリックした時にイベントが起きる」が出来るようになったのだ

f:id:gamecome:20151203084438j:plain

↑線の外側ならちゃんと反応しない

例えば四角形の判定をしたいなら

poly = new PIXI.Rectangle(0,0,400, 1000);

とかに差し替えればいいし、
あと
getBoundsメソッドを備えているオブジェクトなら、どれでも普通に図形を返せる様子(ただし変形処理をしてる時は難しくなりそう)


参考サイト(英語):
http://www.html5gamedevs.com/topic/780-displayobjectcontainer-and-interactivity/
https://github.com/pixijs/pixi.js/issues/1725