Flash的坐标精度
今天用坐标旋转公式写物体的运动刚开始出现了一个怪现象,理论上应该是标准圆周运动的代码最后出来的效果却是半径越来越小的圆周运动,错误的轨迹如下图:
直觉反应是误差累积造成的,但是却不知道具体是哪一点的误差。
折腾了十来分钟,灵光一闪…
这是大误差代码:
这是”精确”的代码(排除浮点运算本身的误差 - -!)
看到这里就明白了原来是直接抓显示对象的坐标导致误差累积引起的。
早些时候就听说舞台上物体的坐标不会太精确,因为单位像素的精度是 1,但是却不知道直接获取显示列表的坐标也是经过处理的。。。
打印第二段代码里面的 trace 的结果:
目测得出结论,获取一个显示对象的坐标,它的有效精度是小数点后两位,并且最后一小数位是 5 的整数倍。
所以”高精度”运算的代码,不要直接使用显示对象的坐标,或者不要使用 as3 - -。
本文完整的正确代码:
更新:根据swf 格式说明文档信息的说明,一个有效像素的尺寸是 1/20(In the SWF format, a twip is 1/20th of a logical pixel. A logical pixel is the same as a screen pixel when the file is played at 100%—that is, without scaling)