まとまりのないブログ

something which something is something

cocos2d 雑記・雑学

cocos2d-x javascript no.2 タッチイベントの追加

投稿日:2017年11月17日 更新日:

イベントはシーンまたはレイヤー、スプライトに追加することができる。イベントを定義し、addListnerにてそのイベントと対象オブジェクトを設定することでタッチイベントを受けることができるようになる。

スプライトにイベントを追加

window.onload = function(){
cc.game.onStart = function(){

var MyScene = cc.Scene.extend({
onEnter:function () {
this._super();
var size = cc.director.getWinSize();

var sprite = cc.Sprite.create(“ball.png”);
sprite.setPosition(size.width / 2, size.height / 2);
sprite.setScale(0.8);
sprite.name = “sprite1”;
this.addChild(sprite, 0);

var sprite2 = cc.Sprite.create(“ball.png”);
sprite2.setPosition(size.width / 2.5, size.height / 2.5);
sprite2.setScale(0.8);
sprite2.name = “sprite2”;
this.addChild(sprite2, 0);

var sprite3 = cc.Sprite.create(“ball.png”);
sprite3.setPosition(size.width / 1.5, size.height / 1.5);
sprite3.setScale(0.8);
sprite3.name = “sprite3”;
this.addChild(sprite3, 0);

cc.eventManager.addListener(listener, sprite);
cc.eventManager.addListener(listener.clone(), sprite2);
cc.eventManager.addListener(listener.clone(), sprite3);

}
});
cc.director.runScene(new MyScene());

};
cc.game.run(“gameCanvas”);
};

var listener = cc.EventListener.create({
event: cc.EventListener.TOUCH_ONE_BY_ONE,

onTouchBegan: function (touch, event) {

var target = event.getCurrentTarget();
var location = target.convertToNodeSpace(touch.getLocation());
var spriteSize = target.getContentSize();
var spriteRect = cc.rect(0, 0, spriteSize.width, spriteSize.height);

if (cc.rectContainsPoint(spriteRect, location)) {
cc.log(target.name + ” touched.”);
return true;
}

return false;
},

onTouchMoved: function (touch, event) {
cc.log(“onTouchMoved”);

var target = event.getCurrentTarget();
var delta = touch.getDelta();
target.setPosition(cc.pAdd(target.getPosition(), delta));
}

return false;
}

});

解説

シーンに対してスプライト3つを追加。(sprite1,sprite2,sprite3)
スプライトのイメージは適当なボールの画像とした。(ball.png)
スプライトを定義・追加したあとそれぞにイベントを追加。(cc.eventManager.addListener)
イベントの種類はタッチとムーブ。
スプライトが複数ある場合は、どのスプライトがタッチされたのかを識別する必要があるため、スプライトごとにイベントを設定する。イベント追加時にlistener.clone()とすることでスプライトごとのイベントを受け取れるようになる。
イベントの設定では単にイベントを定義しただけではゲーム画面全体のどこでもタッチするとイベントが受け取れるようになってしまっているため、スプライトのサイズに合わせてイベントを受け取れるように設定する必要がある。その判定がevent.getCurrentTarget()以下の記述である。

-cocos2d, 雑記・雑学

執筆者:


comment

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

no image

メインビューとサブビューの座標の違い

メインビューでaddsubviewにてuiviewを追加して、ボタンを押したら別のビューが下からビョーンって出てくるようなものを考えていたが、座標の問題で困った。メインビューの座標とサブビューの座標は …

OPSKINSがSteamアイテムのトレードを停止

Steamのゲームでプレイヤーが所有するスキンアイテムをトレードするウェブサイトのOPSKINSがValveによりアカウントを凍結されることになるらしい。ValveとはSetamの運営会社であり、OP …

no image

JAVAサーブレットクラスの初期化

JAVAサーブレットのクラスを初期化するときの方法について何種類かあるので迷ったので覚書き。 かんたんなサーブレットクラスを作ってテストしてみた。 public class InitTest exte …

no image

Ubuntu ServerでBusyBoxとか出てフリーズ、起動できなくなった

mount: mounting /sys on /root/sys failed: No such file or directory mount: mounting /proc on /root/p …

no image

ドコモを解約したらsimロック解除手続きできなくなった

simロックされたドコモの端末はmydocomoから手続きすることでロック解除することができるらしいが、ドコモ解約後は登録情報が即刻削除されてしまうためmydocomoからの手続きが行えなくなる模様 …