2014-10-27 99 views
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); 
    } 
}); 

這是我的整個代碼。Cocos2d-js精靈陣列觸摸事件

首先,在setBall功能,我添加

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

我想要觸摸事件直接this.ball陣列。

其次,在onTouchBegan函數中,this._order爲null。 我不知道爲什麼。

我該如何解決?

回答

2

this._order不確定因爲onTouchBegan功能cc.EventListener類的實例。

如果你想使GameLayer的情況下,你可以將它綁定:

var eventListener = cc.EventListener.create({ 
    event: cc.EventListener.TOUCH_ONE_BY_ONE, 
    swallowTouches: true, 
    onTouchBegan: this.onTouchBegan.bind(this)}); 
+0

哇!非常感謝你!它運作良好! – USER 2014-10-27 11:15:18