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

1q2w3e4r5t6 12.07.2011 21:18

Поворот объекта в зависимости от положения курсора мыши на экране
 
Добрый вечер.
Наверное каждый из вас играл в игры, где нужно с помощью пушки разрушить, например, замок. Так вот в таких играх угол выстрела и его сила определялась положением курсора в приложении (выше курсор - больше угол, дальше курсор от пушки - сильнее выстрел). Хочу сделать подобное, но не получается.
Код AS3:

package Game
{
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public final class Cannon extends Sprite
        {
                private var cannon:Sprite;
                public function Cannon()
                {
                        super();
                        cannon = new Sprite();
                        cannon.graphics.beginFill(0x000000, 1);
                        cannon.graphics.drawRect(10,485,50,10);
                        cannon.graphics.drawCircle(10,490,10);
                        this.addChild(cannon);
                        this.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
                }
 
                private function mouseMoveListener(e:MouseEvent):void
                {
                        this.rotation = Math.atan(e.stageY/e.stageX)*180/Math.PI;
                        trace(Math.atan(e.stageY/e.stageX)*180/Math.PI)
                }
        }
}

Делаю так: поворачиваю пушку на угол а=arctg(y/x), где x и y - координаты мыши в окне приложения. Но прикол в том, что ничего не поворачивается (иногда даже исчезает...). Подскажите, как правильно сделать?)

PS и как задать точку, относительно которой происходит вращение?

i.o. 12.07.2011 21:26

Геометрия. Векторы. Загляните в соседнюю тему..

goodguy 12.07.2011 21:29

Код AS3:

rotation = Math.atan2(stage.mouseY - this.y, stage.mouseX - this.x) * 180 / Math.PI;


1q2w3e4r5t6 12.07.2011 22:03

Цитата:

Сообщение от goodguy (Сообщение 1011203)
Код AS3:

rotation = Math.atan2(stage.mouseY - this.y, stage.mouseX - this.x) * 180 / Math.PI;


Не, не работает... Курсор вожу по экрану, а в отладке координаты не отображаются.

Heavy 12.07.2011 22:12

Листенер должен слушать движение на cannon или всетаки на stage?
А формула goodguy точно рабочая.

goodguy 12.07.2011 22:16

+1. Строчка взята из рабочего кода.

1q2w3e4r5t6 12.07.2011 22:49

Не я не знаю на кого. Просто нужно чтобы когда по окну водишь мышью, в след за ней крутилась моя пушка. Как это сделать?
И еще: как задать точку, относительно которой происходит вращение? Метод есть какой?

saikspaik 12.07.2011 23:01

Делаешь
Код AS3:

stage.addEventListener

, и в это слушатель добавляешь код который привел goodguy, только изменяешь rotation своей пушки. То есть
Код AS3:

cannon.rotation = Math.atan2(stage.mouseY - this.y, stage.mouseX - this.x) * 180 / Math.PI;

Вроде ж все предельно ясно.

1q2w3e4r5t6 12.07.2011 23:19

Спасибо, с этим разобрался что куда и как) А точку поворота как задать-то? Да, у меня сейчас моя пушка крутится, но относительно левого верхнего угла окна (точка 0.0). А мне нужна точка (10, 490)!

i.o. 12.07.2011 23:22

Цитата:

Вроде ж все предельно ясно.
Ну вот для некоторых не ясно, что (10, 490) нужно подставить вместо this.x и this.y


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

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