Pon*_*dle 6 flash precision rendering actionscript-3 coordinates
在ActionScript 3(和IIRC 2)中,显示对象上的x和y属性始终存储为0.05的倍数.
所以像是一样obj.x = 66.6666的东西obj.x = 66.65
大多数时候,这没关系.但有时我最终会得到速度很慢的物体,例如每秒1个像素.1/60(fps)=每帧0.017像素.obj.x += 0.017将永远不会真正改变x值,因为它被四舍五入到最接近的0.05.
这迫使我覆盖DisplayObject的x和y属性,以便它们不会被舍入.
我可以理解舍入坐标到最接近的渲染积分值.使用更高级的渲染器,我甚至可以理解舍入到二进制可表示的一些分数(例如0.25).但0.05不能用二进制表示.
那么为什么Flash的创造者决定四舍五入到最接近的.05?这对我来说似乎是一个任意数字.
Flash内部计算使用具有缇(或像素的1/20)的像素的任何内容.精灵,电影剪辑和舞台上的任何其他对象都是缇.结果,(例如)精灵的坐标总是0.05的倍数(即1/20).(即1/20).
解决方法是将坐标存储在数字中,然后将其分配给displayobject的属性.
小智 5
更好的是,DisplayObject的其他属性的精度也不同...请考虑以下代码:
var tmp:Number = 1/17;
var s:Sprite = new Sprite();
s.scaleX = tmp;
s.scaleY = tmp;
s.x = tmp;
s.y = tmp;
s.rotation = tmp;
trace(tmp);
trace(s.scaleX);
trace(s.scaleY);
trace(s.x);
trace(s.y);
trace(s.rotation);
Run Code Online (Sandbox Code Playgroud)
它会输出
0.058823529411764705
0.0588235294117647
0.0588235294117647
0.05
0.05
0.058823529411764705
Run Code Online (Sandbox Code Playgroud)
这意味着旋转存储在数字精度中,x和y以缇(0.05的倍数)存储,而scaleX和scaleY存储在接近数字但稍微少一点(可能正好少一点?)的精度中
| 归档时间: |
|
| 查看次数: |
3827 次 |
| 最近记录: |