Форум 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=173283)

optemus 28.12.2011 12:34

Вопрос по вращению объектов
 
Вопрос следующий:
Есть круговая шкала на ней 12 цифр. Все это необходимо вращать, сохраняя читабельность цифр
Поясняю: деления шкалы вращаются почасовой и против часовой стрелки при этом цифры также вращаются и всегда должны сохранять вертикальное (читабельное) положение относительно оси Y
Вот графический пример (написан на делфи 7)
До
http://imglink.ru/show-image.php?id=...ca59dbc8cb780e
После
http://imglink.ru/show-image.php?id=...246a71a7ad8524
А вот как подобное реализовать в Флеше CS5 не знаю.

Jewelz 28.12.2011 12:40

цифры вам не вращать нужно а перемещать (синус, косинус в помощь)

или можно вращать весь контейнер (с делениями и цифрами) а потом отдельно каждую цифру назад

optemus 28.12.2011 13:18

вот только как создать такой кантейнер я не знаю.

goodguy 28.12.2011 13:27

Да, собственно, он и нафиг не нужен. Можно легко обойтись без вышеуказанного контейнера.
Вот, по-быстренькому набросал пример класса, который крутит циферблат без вращения цифр.
Код AS3:

package  {
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.text.TextField;
        /**
        * ...
        * @author Серов Константин
        */

        public class DigitsRotation extends Sprite {
 
                private var _angleStep:        int                        = 360 / 12;
                private var _faceRadius:        Number                        = 100;
                private var _allDigits:        Vector.<TextField>        = new Vector.<TextField>();
                private var _initialAngle:        int                        = 0;
                private var _increment:        Number                        = 1;
                private var _cX:                Number;
                private var _cY:                Number;
                private var _degRad:        Number                          = Math.PI / 180;
 
                public function DigitsRotation() {
                        _cX                        = stage.stageWidth  / 2;
                        _cY                        = stage.stageHeight / 2;
                        positionDigits();
                        addEventListener(Event.ENTER_FRAME, onEnterFrame);
                }
 
                private function onEnterFrame(e:Event):void {
                        _initialAngle += _increment;
                        for (var i:int = 0; i < _allDigits.length; i++) {
                                _allDigits[i].x                = _cX + Math.cos((_initialAngle + (i * _angleStep)) * _degRad) * _faceRadius;
                                _allDigits[i].y                = _cY + Math.sin((_initialAngle + (i * _angleStep)) * _degRad) * _faceRadius;
                        }
                }
 
                private function positionDigits():void {
                        for (var i:int = 1; i < 13; i++) {
                                var tf:TextField = new TextField();
                                tf.text                                = String(i);
                                tf.x                                = _cX + Math.cos((_initialAngle + (i * _angleStep)) * _degRad) * _faceRadius;
                                tf.y                                = _cY + Math.sin((_initialAngle + (i * _angleStep)) * _degRad) * _faceRadius;
                                _allDigits.push(tf);
                                addChild(tf);
                        }
                }
        }
}

Надеюсь идея ясна

optemus 28.12.2011 15:51

увы ошибка
Монтажный кадр 1, слой "Слой 1", кадр 1, строка 2 1037: Пакеты не могут быть вложенными.
видемо не умею пользоваться подобным кодом

Jewelz 28.12.2011 15:55

это код класса

чтобы использовать его в кадре попробуйте разобраться как происходит перемещение, и тогда написать в кадре аналогичный код не будет проблем

optemus 28.12.2011 15:55

данный цифирблать лишь 1 из 7 и 5 уже написаны в моем случаее необходимо большую часть рисовать вручную и объеденять пакеты с заранее отрисованным и анимированным содержимом я увы не умею

Добавлено через 32 минуты
увы моих познаний в флаш явно не достаточно чтобы разобраться как работает код выше

goodguy 28.12.2011 17:01

Увы, тогда тут мы вряд ли чем поможем

GBee 28.12.2011 17:02

Так подучите, код свыше очень простой и почти красивый, если бы не адские табуляции :о)))

goodguy 28.12.2011 17:07

Цитата:

если бы не адские табуляции :о)))
Ога, тут уродливо почему-то добавляется. В оригинале красиво и ровно :D

GBee 28.12.2011 17:27

Могу еще про египетские скобки каку сказать, но не буду :о)))))


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

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