![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2011
Сообщений: 25
|
Здравствуйте, у меня такой вопрос. Допустим я хочу переместить объект из точки (0, 0) в точку (100, 300) отображая это все на каждом энтерФрейм. Каким образом это можно реализовать? Я просто слаб в геометрии. Как задать угол и как его узнать? Какие координаты задавать объектам на каждом энтерФрейме? Прошу помочь разобраться.
|
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Math.cos() для координат по оси x, Math.sin() по y, угол между двумя точками Math.atan2()
|
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Вектор, и не надо никаких углов.
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
i.o., вектору тоже надо расчитать направление. В итоге получится тоже самое.
|
|
|||||
|
Регистрация: Jul 2011
Сообщений: 169
|
Не знаю,как использовать вектора,но вот как использовать "Полярные координаты",они дадут вам то,что нужно!
Пусть obj1 - ваш обьект,который надо двигать,"a" - угол,на который надо двигать,x2 - конечный x,y2 - конечный y,s - Скорость(Посчитаете ее сами,т.к она зависит от того,за какое время обьект должен доехать до конца) Все,это даст тебе движение в нужном направлении. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
vec = end - start; - вот и все Если нужно привести к единичному, то vec.normalize(1.0); где vec.x - косинус, а vec.y - синус. При чем явно они нигде не вычисляются. А конкретно по теме, вот (тут не то что синусов нет, даже квадратные корни не присутствуют. И зовется все это - линейная интерполяция. Твиновая функция sinInOut не в счет): var startPoint:Point = new Point(0, 0); var endPoint:Point = new Point(300, 300); var currProgress:Number = 0.0; var startTime:Number = getTimer() + 500; var endTime:Number = startTime + 2000; this.addEventListener(Event.ENTER_FRAME, this.onEnterFrame); function onEnterFrame( e:Event ) : void { var currProgress:Number = (getTimer() - startTime) / (endTime - startTime) ; if (currProgress < 0.0) currProgress = 0.0; if (currProgress > 1.0) currProgress = 1.0; var currPos:Point = calcPos( startPoint, endPoint, sinInOut(currProgress) ); mc.x = currPos.x; mc.y = currPos.y; } function calcPos( start:Point, end:Point, progress:Number=0.0/*[0..1]*/ ) : Point { return new Point( start.x + progress * (end.x - start.x), start.y + progress * (end.y - start.y) ); } function sinInOut( v:Number ) : Number { return 0.5 + 0.5 * Math.sin(Math.PI * (v - 0.5)); }
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 04.08.2011 в 11:20. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
|
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 04.08.2011 в 11:25. |
|
|||||
|
goodguy, не будут. Нормализация вектора - это деление каждой из его координат на длину вектора. То есть примерно так:
синусов и косинусов тут нет
__________________
...вселенская грусть |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:21. |
|
|
« Предыдущая тема | Следующая тема » |
|
|