KinetcJS:使用Sprit时拖动性能非常糟糕

时间:2014-08-14 23:14:16

标签: javascript html5 kineticjs

我像这样使用Kinetic Sprite

var stage = new Kinetic.Stage({
        container: 'container',
        width: 578,
        height: 200
      });
      var layer = new Kinetic.Layer();

      var imageObj = new Image();
      imageObj.onload = function() {
        var blob = new Kinetic.Sprite({
          x: 250,
          y: 40,
          image: imageObj,
          animation: 'idle',
          animations: {
            idle: [
              // x, y, width, height (4 frames)
              2,2,70,119,
              71,2,74,119,
              146,2,81,119,
              226,2,76,119
            ],
            punch: [
              // x, y, width, height (3 frames)
              2,138,74,122,
              76,138,84,122,
              346,138,120,122
            ]
          },
          frameRate: 7,
          frameIndex: 0
        });

        // add the shape to the layer
        layer.add(blob);

        // add the layer to the stage
        stage.add(layer);

        // start sprite animation
        blob.start();

        var frameCount = 0;

        blob.on('frameIndexChange', function(evt) {
          if (blob.animation() === 'punch' && ++frameCount > 3) {
            blob.animation('idle');
            frameCount = 0;
          }
        });

        document.getElementById('punch').addEventListener('click', function() {
            alert("blob.width: "+blob.width());

        }, false);
      };
      imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/blob-sprite.png';

问题是当在手机上使用精灵时我的拖动性能非常差。移动或调整精灵的速度非常慢。

有没有办法提高阻力性能?

编辑:以下是使用动态图像的示例,其中Chrome for Android中的拖动非常慢:http://jsfiddle.net/confile/brecmjzt/

1 个答案:

答案 0 :(得分:0)

您的性能问题不是拖动操作。

将代码重构为不使用frameIndexChange,因为在每个精灵动画循环上进行回调都非常昂贵。