|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Sep 2011
Сообщений: 524
|
спрайт от точки A до точки B - как лучше решить
спрайт находится в точке x;y а должен переместится в точку x1;y1 как легче и проще решить такую задачу?
(кода не надо, речь о самой концепции- может какие есть спецсредства в as3?) то есть требуется плавное перемещение от начала линии до конца. Последний раз редактировалось viktorami; 12.12.2013 в 15:32. |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Есть! Анимация, но если Вы сами не можете просто передвинуть обьект, то это наверное немного плохо.
|
|
|||||
Регистрация: Sep 2011
Сообщений: 524
|
нет нет. речь идет о плавном перемещении по линии от начала и до конца.
|
|
|||||
Это называется анимация.
Можно подойти с двух сторон: 1. Высчитать нормированный вектор направления движения, и в каждом кадре прибавлять к вектору положения вектор перемещения умноженный на скорость перемещения до тех пор, пока объект не будет находиться в эпсилон окрестности конечной точки. 2. Составить уравнение кривой Безье первого порядка с учетом желаемого времени прибытия в конечную точку, и в каждом кадре высчитывать, сколько времени прошло от начала запуска анимации и делить на общее время анимации. В результате вычислений получим нормированное значение переменной t в линейном уравнении Безье, что позволит нам получить текущую координату нашего объекта |
|
|||||
Регистрация: Sep 2011
Сообщений: 524
|
я попытался взять так:
уравнение линии y=kx+b если я буду знать наклон угла линии - то смогу и найти его тангенс - k но как по двум кординатам найти этот угол? |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
package { import flash.display.Sprite; import flash.events.Event; public class AnimationTest extends Sprite { private var sprite:Sprite; private var array:Array; public function AnimationTest() { sprite = new Sprite(); sprite.graphics.beginFill(0x8E6828); sprite.graphics.drawRect(0, 0, 100, 100); sprite.graphics.endFill(); sprite.x = sprite.y = 200; addChild(sprite); array = ['x' ,sprite.x, 400, 'y', sprite.y, 400]; addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private var allTime:Number = 0; private var duration:Number = 3; private function enterFrameHandler(event:Event):void { var time:Number = 1 / 1000 * stage.frameRate; allTime += time; var ratio:Number = allTime / duration; if (allTime >= duration) ratio = 1; var length:int = array.length / 3; for (var i:int = 0; i < length; i++) { const property:String = array[i * 3]; const start:Number = array[i * 3 + 1]; const finish:Number = array[i * 3 + 2] - start; sprite[property] = ratio * finish + start; } } } } |
|
|||||
Регистрация: Sep 2011
Сообщений: 524
|
да нет. что то тут не то
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
|
Часовой пояс GMT +4, время: 19:55. |
|
« Предыдущая тема | Следующая тема » |
|
|