使用Pixi.js进行里程表动画

时间:2016-02-25 00:10:40

标签: javascript jquery html animation pixi.js

前几天我开始开发一个用HTML和javascript编写的动画里程表,我打算在我正在开发的RPG游戏中使用它。此外,我一直在使用Pixi.js来帮助我制作动画。以下2张图片是该计划的主要组成部分:

里程表

enter image description here

一排数字:

enter image description here

以下是我迄今为止所取得的成就:

enter image description here

基本上,前两个按钮立即(没有动画)更新里程表图像上的数字,基于实际HP和PP文本框中包含的实际HP和PP值。如果设置新值'按下它,它将计算实际值和新值之间的差异,将其转换为像素,然后在里程表上执行所需的更改。所有更改都由controller()方法执行。在此方法中,有一个while循环,当HP和PP差值均为零时将会中断。

我设法正确编程controller()方法,因此里程表中的所有数字都按预期更新。但是,我目前在实现动画方面遇到了一些困难。由于我一直在使用Pixi.js,因此我已将以下方法添加到HTML代码中,以便创建动画'动作:

function update() {
  renderer.render(container);

  window.requestAnimationFrame(update);
}
window.requestAnimationFrame(update); //called after the method definition

容器的定义如下所示(我也在里程表和HPPP的构造类中使用了PIXI.extras.TilingSprite.call()):

  function init() {
    container = new PIXI.Container();
    renderer = PIXI.autoDetectRenderer(224, 219, {view:document.getElementById("odometer-canvas")});
    odometer = new Odometer();
    container.addChild(odometer);
    hph = new HPPP(96, 85, 0, 0); //HP - Hundred digit (left)
    container.addChild(hph);
    hpt = new HPPP(128, 85, 0, 0);//HP - Ten digit (middle)
    container.addChild(hpt);
    hpu = new HPPP(160, 85, 0, 0); //HP - Unit digit (right)
    container.addChild(hpu);
    pph = new HPPP(96, 140, 0, 0);//PP - Hundred digit (left)
    container.addChild(pph);
    ppt = new HPPP(128, 140, 0, 0); //PP - Ten digit (middle)
    container.addChild(ppt);
    ppu = new HPPP(160, 140, 0, 0); //PP - Unit digit (right)
    container.addChild(ppu);
  }

到目前为止,我已经遇到了两种情况:第一种情况(onClick=controller(),对于“设置新值”按钮),如果代码执行时没有修改,程序将运行,里程表数字将立即更新,这意味着没有动画。

但是,如果在controller()方法的开头添加update()方法,则数字将非常快速地生成动画,但不会遵守由差异值定义的限制(这意味着它将无限制地从000到999动画。

我仍然非常关注HTML和javascript开发,我甚至不知道Pixi.js是否是最佳选择。无论如何,是否有可能为这个里程表执行平滑和受控制的动画?

由于我没有从我的代码中发布许多细节,我将在这里提供我的项目的源代码(注意:它可以使用node.js提示符执行): http://www.mediafire.com/download/gfvpajsk7ft1gcd/parallax_odometer.rar

1 个答案:

答案 0 :(得分:1)

我几天前设法找到了这个问题的解决方案。基本上,我搞砸了控制方法中的一些变量(变量值对于windows.requestAnimationFrame(update)上的每次迭代都是相同的)我也在使用while循环进行计算,这冻结了窗口选项卡

无论如何,我会在清理完组合后,用修正后的解决方案上传我的源代码。