2014-09-17 2 views
-2

Я вызываю метод и хочу ссылаться на спрайт объекта вне метода с .javascript передать метод объекта

Адрес Этот объект в объекте предоставляет только переданный объект события. Я пытаюсь получить доступ к this.sprite в moveSprite: функция

var roomMap = cc.Layer.extend({ 
    sprite:null, 
    listener:null, 

    ctor:function(){ 
     this._super(); 
     this.init(); 
    }, 

    init: function() { 
     this._super(); 

     this.sprite = new cc.Sprite.create("#player-stand-f-0"); 
     this.sprite.setPosition(new cc.Point(300,300)); 
     this.addChild(this.sprite); 

     this.listener = cc.EventListener.create({ 

      onMouseDown: function(event) { 
       cc.log("onMouseDown"); 
      }, 
      onMouseUp: this.moveSprite 
     }); 

     cc.eventManager.addListener(this.listener, this); 

     return this; 

    }, 

    moveSprite:function(event){ 
     cc.log("mouse up: "+event.getLocationX() + "mouse move: "+event.getLocationY()); 
     console.log(this); 
     var sprite_action = cc.MoveTo(2,cc.p(event.getLocationX(),event.getLocationY())); 
     this.sprite.runAction(sprite_action); 
     this.addChild(sprite_action); 
    } 

});

+0

Вы должны объяснить, какая библиотека вы используете. Где документация? –

+0

@JuanMendes: Как это выглядит: http://cocos2d-x.org/docs/manual/framework/html5/v3/eventManager/en –

ответ

3

Если ваша cc библиотека не дает конкретный способ сделать это, общий способ сделать это с ES5-х Function#bind (который может быть подкладками на старых двигателях):

onMouseUp: this.moveSprite.bind(this) 

Function#bind возвращает функцию что при вызове вызовет исходную функцию с this, установленной на первый аргумент, который вы даете bind. (Вы также можете дать bind дополнительные аргументы, которые будут переданы исходной функции в качестве ее начальных аргументов, за которой последуют любые, которые даются при вызове функции «bound», возвращаемой bind.)

Итак, мы говорим: «Создайте и верните функцию, которая при вызове вызовет moveSprite с this, установленным на то, что this в настоящее время является и назначает это свойство onMouseUp».

+0

Не выглядит '' cc.eventManager.addListener' ', что он устанавливает 'this' ? –

+0

@JuanMendes: Ну, ОП предположил, что этого не происходит, поэтому ... Но я согласен, просто смотрю на это, вот как я читал эту строку, да. Было бы действительно хорошо знать, что такое 'cc' lib. –

+0

cc lib is cocos2d-js –

Смежные вопросы