Просмотр полной версии : Движение объекта прямо и по окружности одновременно
mihael_p
12.09.2013, 12:25
Добрый день! Сразу скажу, что с тригонометрией у меня беда но нужно реализовать движение объекта по схеме приведенной ниже. Объект двигается по Х и окружности одновременно. Помогите, пожалуйста, очень нужно :(
Alex Lexcuk
12.09.2013, 12:38
Самый простой вариант нарисовать курв и сделать анимацию вдоль этого курва
http://swf-flash.blogspot.com/2012/06/curve-text-animation.html
mihael_p
12.09.2013, 12:50
А если это враг, который должен лететь по такой траектории?
KumoKairo
12.09.2013, 13:07
Объект двигается по Х и окружности одновременно.
По вашей схеме объект не движется по Х и Y одновременно, он сначала продвигается по X, потом останавливается, совершает полный оборот, затем немного продвигается и снова останавливается для совершения полного оборота.
На самом деле ваша схема движения - обычная циклоида.
29999
Уравнения для X и Y находятся тут (http://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB%D0%BE%D0%B8%D0%B4%D0%B0#.D0.A3.D1.80.D0.B0.D0.B2.D0.BD.D0.B5.D0.BD.D0.B8.D1.8F)
То есть
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.utils.getTimer;
/**
* ...
* @author KumoKairo
*/
public class Trajectory extends Sprite
{
private var _elementDummy:Sprite;
private var _previousTime:Number;
private var _velocity:Number;
private var _radius:Number;
private var _cycles:uint;
public function Trajectory()
{
_elementDummy = new Sprite();
_elementDummy.graphics.beginFill(0xFF0000);
_elementDummy.graphics.drawCircle(0, 0, 15);
addChild(_elementDummy);
_previousTime = getTimer();
_velocity = 0.02;
_radius = 15;
_cycles = 0;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:Event):void
{
var passedTime:Number = getTimer() - _previousTime - _cycles * 3000;
_elementDummy.x = _radius * _velocity * passedTime - _radius * Math.sin(_velocity * passedTime);
_elementDummy.y = _radius - _radius * Math.cos(_velocity * passedTime);
if (_elementDummy.x > 800)
{
_cycles++;
}
}
}
}
NewProject.swf
Тут принцип простой: "Не хочешь возится с тригонометрией - вкладывай спрайт один в другой и двигай их"
Т.е. берёте спрайт "точка", ложите в спрайт "колесо", колесо сложите в спрайт "вращающееся колесо"
И крутите колесо во вращающемся колесе, двигаете вращающееся колесо.
Я очень чётко знаю тригонометрию, но всё равно, если есть возможность, использую этот способ, дабы не запутаться и легко поправить что нужно.
Не, если нужно не движение на экране, а именно функция, которая возвращает координаты, то конечно придется напрячь мозг, не создавать же вспомогательные спрайты на ровном месте.
AlexCooper
12.09.2013, 17:57
Тут принцип простой: "Не хочешь возится с тригонометрией - вкладывай спрайт один в другой и двигай их"
Т.е. берёте спрайт "точка", ложите в спрайт "колесо", колесо сложите в спрайт "вращающееся колесо"
И крутите колесо во вращающемся колесе, двигаете вращающееся колесо.
Я очень чётко знаю тригонометрию, но всё равно, если есть возможность, использую этот способ, дабы не запутаться и легко поправить что нужно.
Не, если нужно не движение на экране, а именно функция, которая возвращает координаты, то конечно придется напрячь мозг, не создавать же вспомогательные спрайты на ровном месте.
да ну нах такую реализацию)
AlexCooper,
Вложить спрайт в спрайт - по нубский.
В некоторых случаях, может понадобиться расчёт в нескольких не зависимых координатных пространствах.
Для этого нужно использовать матрицы, получая конечный результат их перемножением.
Вместо ручного манипулирования матрицами, во флешь уже есть нативная встроенная система - это дисплей-контейнеры, использующие принцип "вложенности" перемножения матриц, очень простая и удобная.
Вкладывать спрайт в спрайт - может быть не таким уж и нубским способом.
Однажды меня посетила такая цепочка размышлений :)
AlexCooper
12.09.2013, 18:53
Tails я обеими руками за гибкость. Я лучше сломаю мозг при расчетах и смогу управлять движением, нежели нарисую рукой кривую для движения объекта
p.s. Если конечно это не баннер)
mihael_p
13.09.2013, 12:22
KumoKairo , спасибо большое!:)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.