|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Feb 2012
Сообщений: 212
|
Потеря точности координат при использовании localToGlobal
Здравствуйте, как можно вычислить глобальные координаты без потери точности? localToGlobal возвращает точку с округленными координатами.
Последний раз редактировалось PlutDem; 03.03.2012 в 15:10. |
|
|||||
Lorem ipsum
|
Предполагается, что для координат экранных объектов достаточно точности 1/20.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Feb 2012
Сообщений: 212
|
У меня объекты с физикой и для ее нормального просчета такой точности недостаточно. Объект может смещаться на расстояние меньшее чем 0.05 и из за такого вот округления ведет себя некорректно. Поэтому все координаты храню в отдельных Point. Понадобилось перевести локальные координаты в глобальные, а тут вот бяка такая с округлением.
|
|
|||||
Lorem ipsum
|
Остается лишь написать собственный метод преобразования координат.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Feb 2012
Сообщений: 1,540
|
Храни x и y в массиве или объекте.
|
|
|||||
Регистрация: Feb 2012
Сообщений: 212
|
??? И как это поможет узнать глобальные координаты?
|
|
|||||
Регистрация: Feb 2012
Сообщений: 1,540
|
Ну, это надо подумать
Интересно, есть ли какая формула, чтобы узнавать глобальные переменные с высокой точностью? |
|
|||||
Регистрация: Mar 2007
Сообщений: 319
|
#concatenatedMatrix
var sprite1:Sprite = new Sprite(); sprite1.x = 10; sprite1.y = 10; var sprite2:Sprite = new Sprite(); sprite2.x = 100; sprite2.y = 90; var sprite3:Sprite = new Sprite(); sprite3.x = 10; sprite3.y = 30; addChild(sprite1); sprite1.addChild(sprite2); sprite2.addChild(sprite3); trace (sprite3.transform.concatenatedMatrix.transformPoint(new Point(2.123456789,2.123456789)));//(x=122.123456789, y=132.123456789) trace(sprite3.localToGlobal(new Point(2.123456789,2.123456789)));//(x=122.1, y=132.1) Но он медленнее чем тот который выше trace (localToParent(new Point(), sprite3, stage, new Matrix())); trace (localToParent(new Point(), sprite3, sprite1, new Matrix())); function localToParent(point:Point, object1:DisplayObject, object2:DisplayObject, matrix:Matrix):Point { matrix.concat(object1.transform.matrix); if(object1.parent != null && object1.parent != object2) { return localToParent(point, object1.parent, object2, matrix); } return matrix.transformPoint(point); } Последний раз редактировалось Nooob; 03.03.2012 в 18:24. |
Часовой пояс GMT +4, время: 01:12. |
|
« Предыдущая тема | Следующая тема » |
|
|