-->

在iPad上的Retina提高缓慢帆布动画 - KineticJS(Improving slow

2019-08-18 20:01发布

我使用KineticJS执行HTML画布的动画。 动画上的所有桌面浏览器和非视网膜的iDevices(包括iPad的迷你)很好地工作。 然而,从视网膜装置(浏览器或应用内使用Appcelerator的网页视图)这些动画是非常缓慢的。 我也有类似的问题,与视网膜显示在画布上的动画,但没有发现任何真正的解决方案。

我的舞台构造是1024W X 768h。 所有图像都预装。 和动画使用的是预加载的回调函数构造。

如果我减少一半我的舞台大小(并相应地扩展内部内容),动画几乎正常(仍比更加起伏有点其他的iPad)玩。 我对尝试这种唯一理由是我很差的理解是视网膜显示屏是两个“点” /像素。

任何见解或想法,欢迎。 我的下一个尝试是开始改变图像分辨率,而不是动态调整。

Answer 1:

这是由于功能补充说四个月前。 KineticJS将认识到,如果该设备的pixelratio超过1,尽量让它那样尖锐与pixelratio 1的问题是,就像你已经发现了,它杀死的性能,它是无用的地步。 我们发现这是对我们的使用案例的情况。

我们的解决方案:我们注释掉在KineticJS象素率部分,硬编码它永远是一个。

优点:

性能回到了正常

缺点:

图像不是尖锐

这是我们所做的改变部分:

Kinetic.Canvas = function(width, height, pixelRatio) {
// eduplus change to fix pixel ratio performance problems
this.pixelRatio = 1; //pixelRatio || _pixelRatio;

当埃里克讨论这个,他提出的意见进行调查的像素比例的表现,但我不认为他有时间来做到这一点呢。 希望这可以帮助!



Answer 2:

使用KineticJS 5或以上(我不知道究竟何时引入全局设置),这样做的最简单和侵入性最小的方式是现化阶段之前Kinetic.pixelRation设为您所需的值:

Kinetic.pixelRatio = 1;
var stage = new Kinetic.Stage({
    ...
});


Answer 3:

我用这个实例我的舞台之前,超载pixelRatio无需修改KineticJS的源文件。 (节省您不必更新任何更新后的源文件。)

https://gist.github.com/echong/6107722

CoffeeScript的:

# Adjust device pixel ratio
for className in ["HitCanvas", "SceneCanvas", "Canvas"]
    Kinetic[className].prototype.init = ((p_method) -> (p_config={}) ->
        p_config.pixelRatio = 1
        p_method.call @, p_config
    ) Kinetic[className].prototype.init

JavaScript的:

_ref = ["HitCanvas", "SceneCanvas", "Canvas"];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
  className = _ref[_i];
  Kinetic[className].prototype.init = (function(p_method) {
    return function(p_config) {
      if (p_config == null) {
        p_config = {};
      }
      p_config.pixelRatio = 1;
      return p_method.call(this, p_config);
    };
  })(Kinetic[className].prototype.init);
}


文章来源: Improving slow canvas animation on Retina iPad - KineticJS