Точность свойства AS3 x и y - PullRequest
6 голосов
/ 30 октября 2010

В ActionScript 3 (и IIRC 2) свойства x и y в экранном объекте всегда сохраняются как кратные 0,05.

так что-то вроде obj.x = 66.6666 совпадает с obj.x = 66.65

В большинстве случаев это не имеет значения. Но иногда я могу получить действительно медленно движущиеся объекты, например, 1 пиксель в секунду. 1/60 (кадр / с) = 0,017 пикселей на кадр. obj.x += 0.017 не будет никогда фактически изменит значение x, поскольку оно округляется до ближайшего 0,05.
Это заставляет меня переопределить свойства x & y объекта DisplayObject, чтобы они не округлялись.

Я могу понять координаты округления до ближайшего целочисленного значения для рендеринга. С более продвинутым рендером я могу даже понять округление до некоторой дроби, представленной в двоичном виде (например, 0,25). Но 0,05 нельзя представить точно в двоичном виде.

Так почему же создатели Flash решили округлить до ближайшего 0,05? Мне просто кажется, что это произвольное число.

Ответы [ 2 ]

9 голосов
/ 30 октября 2010

Из статьи Википедии о Twips :

Flash вычисляет все, что использует пиксели с двойками (или 1/20 пикселя).Спрайты, видеоклипы и любые другие объекты на сцене размещаются с помощью твипов.В результате координаты (например) спрайтов всегда кратны 0,05 (т. Е. 1/20). (Т. Е. 1/20).

Обходным решением будет сохранение координатв число, а затем назначьте его свойствам объекта отображения.

5 голосов
/ 08 марта 2011

Еще лучше, точность отличается для других свойств 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);

будет выводиться

0.058823529411764705
0.0588235294117647
0.0588235294117647
0.05
0.05
0.058823529411764705

, что означает, что вращение сохраняется с точностью до числа, x и y - в твипах (кратных 0,05), а scaleX и scaleY сохраняются с точностью, близкой к числу, но немного меньшей (может быть, точно на один бит меньше) *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...