Cocos2d-js v3.2 を使用して、cc.Sprite
usingのカスタム サブクラスを作成していextend()
ます。そのサブクラスのインスタンスは、クリック可能 (タッチ可能) であることを意図しており、フレームごとにいくつかの計算が必要です。コードを読みやすくするために、タッチ リスナーを登録し、コンストラクター内にスケジューラー コールバックを追加したいと思います。このようにして、新しいスプライトが作成されるたびに、自動的に使用できるようになります。このアプローチに関して 2 つの質問があります。
- リスナーをコンストラクターに登録することは、そのようなことを行うのに最適な場所ですか? スプライトがノード ツリーに追加される前にコンストラクターが呼び出されるため、現時点では認識されていない副作用があるのではないかと心配しています。
- タッチ リスナー/スケジューラ コールバックは、いつ、どこで登録解除する必要がありますか? スプライトがノード ツリーから削除されたとき、非表示になったとき、またはオブジェクトが破棄されたとき
コード:
var MySprite = cc.Sprite.extend({
ctor: function () {
this._super();
this.initUserInput();
this.initUpdates();
},
update: function (dt) {
// Do some per-frame calculactions
},
initUpdates: function(){
cc.director.getScheduler().scheduleUpdateForTarget(this, 1, !this._isRunning);
},
initUserInput: function(){
var $this = this;
var listener = cc.EventListener.create({
event: cc.EventListener.TOUCH_ONE_BY_ONE,
onTouchBegan: function (touch, event) {
var p = touch.getLocation();
var rect = $this.getBoundingBox();
if(!cc.rectContainsPoint(rect, p))
{
return false;
}
},
onTouchEnded: function (touch) {
},
onTouchMoved: function (touch) {
}
});
cc.eventManager.addListener(listener, this);
}
});