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

root.Unknown 27.12.2008 09:34

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

Написал функцию на вращение объекта с помощью нажатия кнопки по клавиатурным стрелкам, привожу пример ниже:

Код AS3:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedHandler);
 
private function keyPressedHandler(event:flash.events.KeyboardEvent):void {
                        switch (event.keyCode) {
                                case Keyboard.UP :
                                        myObj.roll +=2;
                                        break;
                                case Keyboard.DOWN :
                                        myObj.roll -=2;
                                        break;
                                case Keyboard.RIGHT :
                                        myObj.pan +=2;
                                        break;
                                case Keyboard.LEFT :
                                        myObj.pan -=2;
                                        break;
                        }
}

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

_Smirnoff 27.12.2008 12:51

Код AS3:

addEventListener(MouseEvent.MOUSE_DOWN, вешаешь событие MOUSE_MOVE);
addEventListener(MouseEvent.MOUSE_UP, удаляешь событие MOUSE_MOVE);
addEventListener(MouseEvent.MOUSE_MOVE, в зависимости от того куда ведешь мышу, центрируясь например от центра myObj, и вращаешь.


Кстати в тему http://www.flasher.ru/forum/showthread.php?t=119194, зачем тут появился такой скрол кода?

root.Unknown 27.12.2008 13:11

Это мне было понятно:
Код AS3:

addEventListener(MouseEvent.MOUSE_DOWN, mouseRotateObj);
addEventListener(MouseEvent.MOUSE_UP, mouseRotateObj);

Мне не понятно что в самой функции надо писать, типа место swich, case и т.д. )
Фунrцию саму надо написать:

Код AS3:

private function mouseRotateObj(event:flash.events.MouseEvent):void {
// бла-бла-бла ??? ??? ??? ??? ??? ???
}

Я же так понимаю что при нажатии на кнопку мыши вызвается функция mouseRotateObj которая там поворачивает объект по +2 по каком-то координату x, y, z, только не останавливаясь, пока двигаешь мышью...

Alex Lexcuk 27.12.2008 13:21

Код:

//в первом кадре (демка вращения черного квадрата)
var объектВращения:Sprite, триггерВращения:Boolean, центрВращения:Array,ABC:Number;
объектВращения = new Sprite();
объектВращения.graphics.beginFill(0);
объектВращения.graphics.drawRect(0,0,100,100);
addChild(объектВращения);
центрВращения = [200,200];
объектВращения.x=центрВращения[0];
объектВращения.y=центрВращения[1];


stage.addEventListener(MouseEvent.MOUSE_MOVE, boardMove);
stage.addEventListener(MouseEvent.MOUSE_UP, boardUp);
объектВращения.addEventListener(MouseEvent.MOUSE_DOWN, boardDown);
function boardMove(e:MouseEvent):void {
        if (триггерВращения){
                ABC = Math.atan2(центрВращения[0] - stage.mouseX, центрВращения[1] - stage.mouseY)*180/Math.PI;
                объектВращения.rotation = 180-ABC;
                }
}

function boardDown(e:MouseEvent):void {
триггерВращения = true;
}

function boardUp(e:MouseEvent):void {
триггерВращения = false;
}

Это что б принцип понять (для трех мерки есть готовое вращение)
http://www.dnadillo.dn.ua/flex/3d-text-cube.html

Chas 27.12.2008 13:22

персонаж смотрит на курсор
Код:

var xdiff:int = char.x-mouseX;
var ydiff:int = char.y-mouseY;
var angleRad:Number = Math.atan2(ydiff, xdiff);
char.rotation = angleRad * 180 / Math.PI;


root.Unknown 11.01.2009 09:23

Ага, спасибо, уже разобрался, только теперь не могу разобраться с кнопками на сцене, получается когда нажимаю по кнопке в сцене, то объект прокручивается... Можно как-то сделать чтобы при наведении курсора на кнопку объект переставал крутится?


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

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