Pixi.js阶段的父母

时间:2014-05-06 16:19:20

标签: javascript pixi.js

我在javascript中有一个图形对象。在这里我有一个pixi js舞台作为私人成员。在这个阶段,我有一个PIXI.Graphics()对象,我将在其中保持两条垂直线。我在图表对象中有方法根据点击操作这些方法。

问题是:我将舞台设置为交互式,然后我将stage.mousedown事件设置为一个函数,但是在此函数中,我的this是舞台而不是我的Graph对象。我试图访问父级,但它是null。我尝试在创建mousdown操作之前设置父级,方法如下:

this.stage.parent = this;
this.stage.mousedown = function(mouseData) {...}

然后mousedown动作永远不会被击中。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您需要在创建mousedown函数的同一范围内创建变量.JS函数会自动了解其父作用域中的变量。这可以是对父对象范围或要调用的函数的引用。

function PixiObject() {

  var stage, 
      renderer;

  this.init = function() {
    stage = new PIXI.Stage(0x000000, true);
    renderer = PIXI.autoDetectRenderer(480, 320, null, false);
    document.body.appendChild(renderer.view);

    var onStageDownA = function() {
      console.log('onStageDownA called');
    };
    this.onStageDownB = function() {
      console.log('onStageDownB called');
    };
    var self = this;
    stage.mousedown = stage.touchstart = function() {
      console.log(this); // stage
      console.log(self); // pixi object
      onStageDownA(); // calls function
      self.onStageDownB(); // calls function
    };

    update();
  }

  function update() {
    requestAnimFrame(update);
    renderer.render(stage);
  }
}

window.onload = function() {
    var p = new PixiObject();
    p.init();
};

这是一个有效的例子:

http://codepen.io/ianmcgregor/pen/eFEJv