まとまりのないブログ

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

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

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

関連記事

cocos2d-x javascript no.0 基本

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

no image

BIGLOBEモバイルに電話認証が追加されていた件

※認証は通話料無料でできるように改善された模様 契約しているのビッグローブの管理画面にログインしようとしたらいつの間にか電話認証を求められるようになっていた。 マイページの「お客さま情報」にアクセスす …

no image

マルチディスプレイは気が散るか効率がいいかどっちなのか

人間はシングルタスクしかできないようになっているためマルチタスクは能率が悪く害悪でしかないというような意見があるようなのだが、その原因となっているのが複数ディスプレイを設置するいわゆるマルチディスプレ …

no image

xcode – appstore – file must contain a higher version than that of the previously uploaded version

This bundle is invalid. The key CFBundleVersion in the Info.plist file must contain a higher version …

no image

闇カジノの件でバドミントン協会から登録抹消されていた田児賢一が処分解除されたとのこと

タイだかインドネシアだか海外でバドミントンやってるらしい田児賢一は今どうしてるんだろうかなとググってみたら現在はYoutuberになっている様子。で最近の投稿で闇カジノの件の処分が解除されて、晴れて日 …