我使用KineticJS执行HTML画布的动画。 动画上的所有桌面浏览器和非视网膜的iDevices(包括iPad的迷你)很好地工作。 然而,从视网膜装置(浏览器或应用内使用Appcelerator的网页视图)这些动画是非常缓慢的。 我也有类似的问题,与视网膜显示在画布上的动画,但没有发现任何真正的解决方案。
我的舞台构造是1024W X 768h。 所有图像都预装。 和动画使用的是预加载的回调函数构造。
如果我减少一半我的舞台大小(并相应地扩展内部内容),动画几乎正常(仍比更加起伏有点其他的iPad)玩。 我对尝试这种唯一理由是我很差的理解是视网膜显示屏是两个“点” /像素。
任何见解或想法,欢迎。 我的下一个尝试是开始改变图像分辨率,而不是动态调整。
这是由于功能补充说四个月前。 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;
当埃里克讨论这个,他提出的意见进行调查的像素比例的表现,但我不认为他有时间来做到这一点呢。 希望这可以帮助!
使用KineticJS 5或以上(我不知道究竟何时引入全局设置),这样做的最简单和侵入性最小的方式是现化阶段之前Kinetic.pixelRation设为您所需的值:
Kinetic.pixelRatio = 1;
var stage = new Kinetic.Stage({
...
});
我用这个实例我的舞台之前,超载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);
}