まとまりのないブログ

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

windows10の内蔵の時計がずれる

自作して4~5年つかているPCの内蔵時計がずれるようになった。手作業で同期をすればその時だけは正しい時間になるがまたしばらくするとどんどん遅れていってまったく時計として機能しない。ぐぐってなぜ時計が遅 …

cocos2d-x javascript no.3 スプライトの大きさの変更

スプライトの大きさの変更 var sprite = cc.Sprite.create(“ball.png”); sprite.setTextureRect(cc.rect(0, …

cocos2d-x javascript no.0 基本

cocos2dの構成。cocos2d-jsは下記のような構成要素を持つ。 Director シーン レイヤー スプライト Director 実行環境やシーンの制御など、ゲームを構成するすべてを管理する …

Steamのゲームのアップデートが終わらない

ゲームのアップデートをダウンロード中に再起動してから調子がおかしくなった。Steamを起動するとどんな設定をしたとしてもアップデートのダウンロードを開始してしまい中断をボタンを押しても無視される。どう …

no image

肉と植物油をやめるとアトピーが抑えられる

油を断てばアトピーはここまで治るという本がある。まだ読んではいないのだが(注文中)、植物油または植物油脂がアトピー性皮膚炎の悪化に関係するということを主張しているらしい。私自身アトピー持ちのため長年苦 …