1
var GameLayer = cc.Layer.extend({
    ball:[],
    number:[],
    label:[],
    numberofballs:8,
    _order:0,
    ctor:function () {
        this._super();
        this.init();
    },
    init:function(){
        this._order=0;
        cc.log(this._order);
        this.setBall();
    },
    setCoordX:function(){
        var coordX=Math.random()*1000%330+50;
        cc.log(coordX);
        return coordX;
    },
    setCoordY:function(){
        var coordY = Math.random()*700%700+50;
        cc.log(coordY);
        return coordY;
    },
    onTouchBegan:function(touch, event){
        var target = event.getCurrentTarget();
        var PosInScreen = target.convertToNodeSpace(touch.getLocation());
        var Size = target.getContentSize();
        var rect = cc.rect(0, 0, Size.width, Size.height);

        if(cc.rectContainsPoint(rect, PosInScreen)){

            if(target.getTag()==this._order) {
                target.removeFromParent();
                this._order++;
            }

        }
        return false;
    },
    setBall:function(){
        for(var i=0;i<this.numberofballs;i++){
            this.number.push(Math.round(Math.random()*100));
        }
        this.number.sort(function(left,right){
            return left-right;
        });
        for(var i=0;i<this.numberofballs;i++){
            var eventListener = cc.EventListener.create({
                event: cc.EventListener.TOUCH_ONE_BY_ONE,
                swallowTouches: true,
                onTouchBegan: this.onTouchBegan});


            this.ball[i]=cc.Sprite.create(res.ball_png);
            this.ball[i].x=this.setCoordX();
            this.ball[i].y=this.setCoordY();
            this.ball[i].setTag(i);
            this.addChild(this.ball[i]);

            var label=new cc.LabelTTF(this.number[i],"Ariel",25);
            label.x=50;
            label.y=55;
            this.ball[i].addChild(label);
            cc.eventManager.addListener(eventListener, this.ball[i]);

        }

    }
});

var GameScene = cc.Scene.extend({
    onEnter:function () {
        this._super();
        var layer = new GameLayer();
        this.addChild(layer);
    }
});

これが私のコード全体です。

まず、 setBall 関数で、追加しました

 cc.eventManager.addListener(eventListener, this.ball[i]);

this.ball配列で直接タッチイベントを作りたいです。

次に、onTouchBegan 関数では、this._order が null です。どうしてか分かりません。

どうすれば修正できますか?

4

1 に答える 1

2

onTouchBegan関数では、これcc.EventListenerクラスのインスタンスであるため、this._order未​​定義です。

これをGameLayerのインスタンスにしたい場合は、バインドできます。

var eventListener = cc.EventListener.create({
    event: cc.EventListener.TOUCH_ONE_BY_ONE,
    swallowTouches: true,
    onTouchBegan: this.onTouchBegan.bind(this)});
于 2014-10-27T11:08:34.100 に答える