Pixi.js画下降方块

时间:2015-11-12 12:46:13

标签: javascript canvas pixi.js

我使用PIXI.js在画布上绘制了一个基于网格的系统。

我试图动画这个东西,首先每个粒子position.y -200 ,然后使用Tween.js我试图让它们掉落

我将位置更改为正确的位置,即particle._y

正如您所注意到的那样,在跌落之后会看到一些空的空间并且CPU过热。

http://jsbin.com/wojosopibe/1/edit?html,js,output

function animateParticles() {
    for (var k = 0; k < STAGE.children.length; k++) {

        var square = STAGE.children[k];
        new Tween(square, 'position.y', square._y, Math.floor(Math.random() * 80), true);

    }
}

我认为我做错了什么。

有人可以解释一下我做错了什么以及为什么跌倒后有空位?

1 个答案:

答案 0 :(得分:1)

空格的原因是你的一些动画没有启动。原因在于这一行:

new Tween(square, 'position.y', square._y, Math.floor(Math.random() * 80), true);

查看Tween.js的函数定义,我看到了:

function Tween(object, property, value, frames, autostart)

第四个参数是帧。我假设这是完成动画所需的帧数。 那么你的Math.floor函数有时会返回零,这意味着动画将没有帧并且不会开始!!

您可以使用math.ceil()来解决此问题。这样,动画总会至少有一帧:

new Tween(square, 'position.y', square._y, Math.ceil(Math.random() * 80), true);

现在,就性能而言,我建议采用不同的方式进行设置......

动画所有这些图形对象非常密集。我的建议是绘制一个红色正方形,然后使用RenderTexture从正方形生成位图。然后你可以在舞台上添加Sprite,在动画制作时可以更好地执行WAY。

//Cretae a single graphics object
var g = new PIXI.Graphics();
g.beginFill(0xFF0000).drawRect(0, 0, 2, 2).endFill();

//Render the graphics into a Texture
var renderTexture = new PIXI.RenderTexture(RENDERER, RENDERER.width, RENDERER.height);
renderTexture.render(g);

for (var i = 0; i < CONFIG.rows; i++) {
    for (var j = 0; j < CONFIG.cols; j++) {

        var x = j * 4;
        var y = i * 4;

        //Add Sprites to the stage instead of Graphics
        var PARTICLE = new PIXI.Sprite(renderTexture);
        PARTICLE.x = x;
        PARTICLE.y = -200;

        PARTICLE._y = H - y;

        STAGE.addChild(PARTICLE);
    }
}

此链接将包含更多RenderTexture示例: http://pixijs.github.io/examples/index.html?s=demos&f=render-texture-demo.js&title=RenderTexture