Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   спрайт от точки A до точки B - как лучше решить (http://www.flasher.ru/forum/showthread.php?t=205627)

viktorami 12.12.2013 15:20

спрайт от точки A до точки B - как лучше решить
 
спрайт находится в точке x;y а должен переместится в точку x1;y1 как легче и проще решить такую задачу?
(кода не надо, речь о самой концепции- может какие есть спецсредства в as3?)
то есть требуется плавное перемещение от начала линии до конца.

Akopalipsis 12.12.2013 15:24

Есть! Анимация, но если Вы сами не можете просто передвинуть обьект, то это наверное немного плохо.

caseyryan 12.12.2013 15:25

Кэп мне тут подсказывает, что нужно просто задать ему новые координаты x и y

viktorami 12.12.2013 15:32

нет нет. речь идет о плавном перемещении по линии от начала и до конца.

KumoKairo 12.12.2013 15:39

Это называется анимация.
Можно подойти с двух сторон:
1. Высчитать нормированный вектор направления движения, и в каждом кадре прибавлять к вектору положения вектор перемещения умноженный на скорость перемещения до тех пор, пока объект не будет находиться в эпсилон окрестности конечной точки.
2. Составить уравнение кривой Безье первого порядка с учетом желаемого времени прибытия в конечную точку, и в каждом кадре высчитывать, сколько времени прошло от начала запуска анимации и делить на общее время анимации. В результате вычислений получим нормированное значение переменной t в линейном уравнении Безье, что позволит нам получить текущую координату нашего объекта

viktorami 12.12.2013 15:44

я попытался взять так:
уравнение линии
y=kx+b
если я буду знать наклон угла линии - то смогу и найти его тангенс - k
но как по двум кординатам найти этот угол?

Akopalipsis 12.12.2013 16:15

Код AS3:

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;
                        }
                }
 
        }
 
}


viktorami 12.12.2013 16:20

да нет. что то тут не то

Akopalipsis 12.12.2013 16:27

Цитата:

да нет. что то тут не то
Что?) Тогда могу посоветовать почитать про вектора.

KumoKairo 12.12.2013 16:31

Я же написал как можно сделать. Не нужны никакие углы, это простейшая векторная алгебра


Часовой пояс GMT +4, время: 11:26.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.