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

Andrej 08.12.2010 13:35

Поворот объекта за мышкой
 
Здравствуйте.Такой вопрос как заставить обьект,например прямоугольник поворачиваться вокруг своей оси за мышкой.При этом чтобы он оставался на своем месте.Спасибо.

ps_spectre 08.12.2010 13:52

эта тема стопицот раз обсуждалась (поиск лучше использовать)
вот быстренько код накидал, один из вариантов, как можно сделать. (можно и по-другому, например draw и матрицы поворота использовать)
Код AS3:

 
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.geom.Point;
 
        [SWF(width=500, height=400, frameRate=31)]
        public class Rectangle extends Sprite
        {
                private var _rect:Sprite;
                private var _rectContainer:Sprite;
                private var _size:int = 100;               
                private var _x:Number = 300.0;
                private var _y:Number = 200.0;
 
                public function Rectangle()
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);                       
                }
 
                private function init(e:Event = null):void
                {
                        if (hasEventListener(Event.ADDED_TO_STAGE))
                                removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        _rect = new Sprite();
                        _rect.graphics.beginFill(0x175BC1);
                        _rect.graphics.drawRect(0, 0, _size, _size);
                        _rect.graphics.endFill();                       
                        _rect.graphics.beginFill(0x8D23B6);
                        _rect.graphics.drawCircle(_size -10, _size / 2, 10);
                        _rect.x = -_size/2;
                        _rect.y = -_size/2;
 
                        _rectContainer = new Sprite();
                        _rectContainer.addChild(_rect);
                        _rectContainer.x = _x;
                        _rectContainer.y = _y;                       
 
                        addChild(_rectContainer);
 
                        stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
                }
 
                private function mouseMoveHandler(e:MouseEvent):void
                {
                        var dx:Number = e.stageX - _x;
                        var dy:Number = e.stageY - _y;
                        var angle:Number = Math.atan2(dy, dx) * 180 / Math.PI;
 
                        _rectContainer.rotation = angle;
                }
 
        }


tsarapkabel 08.12.2010 16:20

Пакет потерял.

ps_spectre 08.12.2010 16:35

tsarapkabel, спасибо, Кэп. Пакет каждый допишет сам.

Andrej 08.12.2010 17:36

Спасибо.Я в поиске искал да чет как то все не то,может не корректно вводил.Спасибо.

Demoralizator 05.02.2011 18:15

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

samana 05.02.2011 18:46

Цитата:

Сообщение от Demoralizator (Сообщение 970671)
а если задачу немного усложнить. нужен плавный поворот к точке с заданной скоростью.
есть у кого-нибудь нормальный вариант? а то у меня фигня какая-то получается, а именно на переходе через 0 градусов

Stormit рассказывал как сделать подобное мега ссылка

willis83 05.02.2011 18:46

попробуйте твинет какой нибудь

Demoralizator 05.02.2011 20:18

samana, о, большое спасибо.
теперь я знаю, что делал правильно =). видимо проще уже некуда.


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

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