|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Aug 2012
Сообщений: 297
|
Почему движение по окружности быстрее, чем движение по длине окружности через x,y?
Здравствуйте.
Если я двигаю объект сверху (A) вниз (B) со скоростью 2, то он проходит за, допустим, одну минуту. А когда я двигаю объект по окружности, а длина окружности равна длине от A до B, с той же скоростью, то объект движется гораздо быстрее, где-то за полминуты он уже обходит всю окружность. |
|
|||||
Может быть потому, что скорость бывает линейная и угловая?
__________________
interplanety |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Попробуйте использовать анимацию построенную на времени, такие проблемы совсем отпадут.
|
|
|||||
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; import flash.geom.Point; public class MoveSpeed extends Sprite { private var _targets:Array; public function MoveSpeed() { _targets = []; //радиус окружности _radius = 100; //длина окружности var straightLength:Number = 2 * Math.PI * _radius; //центр окружности _center = new Point(180, 180); //прямая равная длине окружности var straight:Sprite = new Sprite(); straight.graphics.lineStyle(2, 0x55EA64); straight.graphics.moveTo(10, 50); straight.graphics.lineTo(10 + straightLength, 50); addChild(straight); //окружность var circle:Sprite = new Sprite(); circle.graphics.lineStyle(2, 0x55EA64); circle.graphics.drawCircle(0, 0, _radius); circle.graphics.endFill(); circle.x = _center.x; circle.y = _center.y; addChild(circle); //два кружка которые будем двигать var target0:Sprite = new Sprite(); target0.graphics.beginFill(0xEBC154); target0.graphics.drawCircle(0, 0, 10); target0.graphics.endFill(); target0.x = 400; target0.y = 300; addChild(target0); var target1:Sprite = new Sprite(); target1.graphics.beginFill(0xEBC154); target1.graphics.drawCircle(0, 0, 10); target1.graphics.endFill(); target1.x = 10; target1.y = 50; addChild(target1); _targets[0] = target0; _targets[1] = target1; //теперь настраиваем анимацию для вращения по окружности _start0 = target0.rotation;//начальное значение _finish0 = 360 - _start0//конечное значение минус начальное //настройки для перемещения по прямой _start1 = target1.x; _finish1 = 10 + straightLength - _start1; //время за которое должна выполнится анимация _delay = 6; //узнаем кол-во кадров _frameRate = stage.frameRate; stage.addEventListener(Event.ENTER_FRAME, stage_enterFrameHandler); } private var _allTime:Number = 0; private var _delay:Number; private var _angle:Number = 360; private var _angleRatio:Number = 0; private var _start0:Number; private var _finish0:Number; private var _start1:Number; private var _finish1:Number; private var _center:Point; private var _radius:Number; private var _frameRate:Number; private function stage_enterFrameHandler(event:Event):void { var time:Number = 1 / 1000 * _frameRate; _allTime += time / _delay; var angleRatio:Number = _allTime * _finish0 + _start0; var lineRatio:Number = _allTime * _finish1 + _start1; _targets[0].x = Math.cos(angleRatio * Math.PI / 180) * _radius + _center.x; _targets[0].y = Math.sin(angleRatio * Math.PI / 180) * _radius + _center.y; _targets[1].x = lineRatio; if (_allTime >= 1) { _allTime = 0; } } } } |
|
|||||
Это товарищ Akopalipsis просто показал свой вариант решения подобной задачи , а код ТС мы так и не увидели.
|
|
|||||
Цитата:
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
Часовой пояс GMT +4, время: 14:07. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|