Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вращение объектов по окружности (http://www.flasher.ru/forum/showthread.php?t=183378)

Srednas 20.08.2012 12:45

Вращение объектов по окружности
 
Что-то разболелся и совсем не соображаю.
Может подскажете :)
Есть «плоская солнечная система». У некоторых («главных») дисков есть «спутники». Когда кликаю по одному из «спутников», они все (принадлежащие «главному» диску) одновременно вращаются на определенный угол и останавливаются.
Первоначально, перед запуском, все «спутники» становятся на
Организовано это так:
При клике на «спутник»:
Код AS3:

// идет обращение к родительскому объекту
TweenMax.to(parentDisk, 0.5, { rotation : rotationAngle, ease : Sine.easeInOut});

«Главный» диск реагирует, вращением всех спутников.
Код AS3:

override public function set rotation(value:Number):void{
                var i:int,
                    dl:int = _disks.length;  // количество «спутников»
                for (i=0; i<dl; ++i){
                                _disks[i].x = _radius * Math.cos(value);
                                _disks[i].y = _radius * Math.sin(value);
                }
}

Но в итоге получается, что все «спутники» сгрудились в 0 градусов. Т.е. нужно учитывать уже существующее положение «спутников», но что-то не выходит. Подскажите как заставить их вращаться, а затем, с места остановки, снова, по команде, вращаться на нужный угол?

Wolsh 20.08.2012 13:02

Ну так Вы же не поворачиваете на какой-то угол, а устанавливаете угол. Надо прибавлять к текущему значению, а не устанавливать одинаковое новое.

Добавлено через 3 минуты
Что-то типа
Код AS3:

_disks[i].x = _radius * Math.cos(_disks[i].rotation + value);

Добавлено через 5 минут
Где _disks[i].rotation должно хранить текущий угол диска, и конечно обновляться при каждом повороте.

vizgl 20.08.2012 17:20

Как-то так:
Код AS3:

satelliteX = planetX + cos(satelliteAngle + rotationAngle) * orbitRadius;
satelliteY = planetY + sin(satelliteAngle + rotationAngle) * orbitRadius;

А вообще, орбиты у спутников обычно эллипсообразные. Поэтому формула будет немного сложнее.


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

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