关联容器中的精灵 - Pixi.js

时间:2016-03-11 20:51:57

标签: javascript animation pixi.js

我们假设我有两个类似的类:

//one class
    function classA() {
    var texture = PIXI.Texture.fromImage("someImage");
    PIXI.extras.TilingSprite.call(this, texture, 224, 219);

    this.position.x = 0;
    this.position.y = 0;
    this.tilePosition.x = 0;
    this.tilePosition.y = 0;
    }

    classA.constructor = classA;
    classA.prototype = Object.create(PIXI.extras.TilingSprite.prototype);

//another class
    function classB() {
    var texture = PIXI.Texture.fromImage("anotherImage");
    PIXI.extras.TilingSprite.call(this, texture, 36, 42);

    this.position.x = 0;
    this.position.y = 0;
    this.tilePosition.x = 0;
    this.tilePosition.y = 0;
    }

    classB.constructor = classB;
    classB.prototype = Object.create(PIXI.extras.TilingSprite.prototype);

在另一个文件中,我从classB创建了1个classA实例和3个实例,并将它们全部添加到容器中:

container = new PIXI.Container();
renderer = PIXI.autoDetectRenderer(224, 219, {view:document.getElementById("some-canvas")});

a = new classA();
container.addChild(a);
b1 = new classB();
container.addChild(b1);
b2 = new classB();
container.addChild(b2);
b3 = new classB();
container.addChild(b3);

我想以某种方式将classB关联到classA,这样我每次创建1个classA实例时都不需要创建3个classB实例(换句话说,我想执行一个addChild()函数每个类实例)。这可能吗?

1 个答案:

答案 0 :(得分:0)

只是想确保我理解你想要实现的目标。你基本上想要在构造函数内部切换container.addChild函数,而不是在下一行吗?

首先,我会反对它。凭借我的编码经验,我建议不要在构造函数中放置任何真正的功能。通常,构造函数应该只是用于正确设置基本变量和环境(就像您现在所做的那样)。因为当你走这条路时,你可以将所有类型的东西添加到构造函数中,它不会是代码结构的最佳选择。如果在构造函数中有多个事情需要处理,可以将它们分成一些.init-function左右。但这只是我对代码组织的看法和经验。

如果我记得"这个"正确引用构造函数内部,你应该能够这样做:

addChildFunction = container.addChild.bind(container);
var a = new classA(addChildFunction);
var a2 = new classA(addChildFunction);

让构造函数接收函数作为参数:

function classA(addChild) {
    var texture = PIXI.Texture.fromImage("someImage");
    PIXI.extras.TilingSprite.call(this, texture, 224, 219);

    this.position.x = 0;
    this.position.y = 0;
    this.tilePosition.x = 0;
    this.tilePosition.y = 0;
    addChild(this);
}

为什么我建议使用.bind,因为如果容器对象将来发生变化,它应该会给你更大的灵活性。如果传递构造函数容器对象,则容器必须始终具有.addChild方法,现在和将来(如果有更改)。当然,您也可以只将构造函数传递给容器对象,但如果容器对象将来发生更改,则必须确保构造函数正确处理它。