Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Остановка 3D объекта в сцене (http://www.flasher.ru/forum/showthread.php?t=119640)

root.Unknown 26.12.2008 03:43

Остановка 3D объекта в сцене
 
Не могу разобратся с остановкой 3D объекта в сцене.
В общем сцена в которой всего 1-н кадр, на котором собственно расположен 3D Объект и две кноки, 1-я кнопка запускает вращение объекта по часовой стрелке, 2-я кнопка останавливает объект и он останавливается так как крутился, а не перепрыгивает в самое изначальное положение то есть на '0'.

Объект был создан в программе 3D Max, конвертирован в код AS, и создан как внешний файл, который подгружается в сцену...

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

Код AS3:

var pot; // 3D Объект
/* Первая кнопка с ID: hmBtn расположена в сцене */
hmBtn.addEventListener( MouseEvent.MOUSE_DOWN, rotateObj);
function rotateObj( event : Event ):void {
addEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
}
private function enterFrameHandlerPlay( event : Event ):void {
pot.pan +=2;
scene.render();
}
 
/* Вторая кнопка с ID: hmBtnTwo расположена в сцене */
hmBtnTwo.addEventListener( MouseEvent.MOUSE_DOWN, enterFrameHandlerStop );
private function enterFrameHandlerStop( event : Event ):void {
pot. <- ?????????????????????????????????????????????????
scene.render();
}

Нужно дописать вторую функцию...
Как можно остановить 3D объект? Вот он крутится и только нажму по кнопке он сразу остановится в том же месте в которое перекрутился.
Может есть способ еще проще написать функции для воспроизведения и остановки 3д объекта, подскажите...
Задолбался лазить по Adobe Flash Help-у...
:o:confused:

Alex Lexcuk 26.12.2008 10:11

Подозреваю что бы он остановился в нужном положении, можно просто удалить листенер
Код:

addEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
hmBtnTwo.addEventListener( MouseEvent.MOUSE_DOWN, enterFrameHandlerStop );
private function enterFrameHandlerStop( event : Event ):void {
removeEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
}


root.Unknown 26.12.2008 13:47

Цитата:

Сообщение от Alex Lexcuk (Сообщение 786499)
Подозреваю что бы он остановился в нужном положении, можно просто удалить листенер
Код:

addEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
hmBtnTwo.addEventListener( MouseEvent.MOUSE_DOWN, enterFrameHandlerStop );
private function enterFrameHandlerStop( event : Event ):void {
removeEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
}


Отлично, спасибо, всё работает :drinks:
А как эти два действия на одну кнопку применить?
Знаю что с помощю условных операторов if... else..., но точно как не знаю :(

Код AS3:

// 1-я кнопка
hmBtn.addEventListener( MouseEvent.MOUSE_DOWN, rotateObj);
function rotateObj( event : Event ):void {
addEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
}
// 2-я кнопка
hmBtnTwo.addEventListener( MouseEvent.MOUSE_DOWN, enterFrameHandlerStop );
}
// функция для вращения объекта - 1-я кнопка
private function enterFrameHandlerPlay( event : Event ):void {
pot.pan +=2;
scene.render();
}
// фугкция для остановки объекта - 2-я кнопка
private function enterFrameHandlerStop( event : Event ):void {
removeEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
scene.render();
}

Может кто-то поможет написать if() {...} else() {...}? :rolleyes:
Объект на сцене стоит на одном месте и присутствует всего одна кнока, нажимаю по этой кнопе он начинает крутится, нажимаю еще раз по ней он останавливается.

iNils 26.12.2008 14:11

root.Unknown, не надо злоупотреблять раскраской текста.

Alex Lexcuk 26.12.2008 14:16

Код:

private function rotateObj( event : MouseEvent ):void {
if (this.hasEventListener(Event.ENTER_FRAME))
        removeEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
else this.addEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
}


root.Unknown 26.12.2008 14:55

Цитата:

Сообщение от iNils (Сообщение 786551)
root.Unknown, не надо злоупотреблять раскраской текста.

Хорошо, больше не буду :)

Alex Lexcuk что-то не работает, ошибки выскакивают...
Вот как я написал:

Код AS3:

hmBtn.addEventListener( MouseEvent.MOUSE_DOWN, rotateObj);
 
private function rotateObj( event : MouseEvent ):void {
if (this.hasEventListener(Event.ENTER_FRAME))
removeEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
else this.addEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
}
 
private function enterFrameHandlerPlay( event : Event ):void {
pot.pan +=2;
scene.render();
}

Ошибки:
1-я в строке private function rotateObj( event : MouseEvent ):void {
Описание: 1013: The private attribute may be used only on class property definitions.
2-я в строке private function enterFrameHandlerPlay( event : Event ):void {
Описание: 1013: The private attribute may be used only on class property definitions.

Alex Lexcuk 26.12.2008 17:05

Код:

function rotateObj( event : MouseEvent ):void {
if (this.hasEventListener(Event.ENTER_FRAME))
        this.removeEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
else this.addEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
}


Psycho Tiger 26.12.2008 17:08

Вы бы лучше писали во внешнем классе, а не в кадрах. Да и редактор кода Flash IDE просто убожественен.

root.Unknown 26.12.2008 18:03

Так дело в том что я и пишу во внешнем класе :)
Не пойму в чем проблема...

Код AS3:

// кнопка расположеная на сцене с ID: hmBtn, она вызывает функцию rotateObj, которая запускает или останавливает объект.
hmBtn.addEventListener( MouseEvent.MOUSE_DOWN, rotateObj);
 
private function rotateObj( event : MouseEvent ):void {
if (this.hasEventListener(Event.ENTER_FRAME)) // Если объект вращаеться
removeEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay ); // его нужно остановить
else this.addEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay ); // Если объект остановлен, он начинает вращаться
}
// Функция которая заставляет вращатся объет бесконечное число раз по +2
private function enterFrameHandlerPlay( event : Event ):void {
pot.pan +=2;
scene.render();
}

Я уже начинаю сходить с ума, смотрю видео туториалы на сайте адоб, такого видео нету, а мне очень нужно написать эту часть кода.

Добавлено через 22 минуты
Цитата:

Сообщение от Alex Lexcuk (Сообщение 786608)
Код:

function rotateObj( event : MouseEvent ):void {
if (this.hasEventListener(Event.ENTER_FRAME))
        this.removeEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
else this.addEventListener( Event.ENTER_FRAME, enterFrameHandlerPlay );
}


Огромнейшее тебе спасибо мен... :yahoo::drinks::drinks:
Это сработало, но все равно пришлось повозится немного, оказывается там надо было убрать "private" и за кнопкой hmBtn поставить символ "}", ну с кем не бывавает :mosking:
Спасибо еще раз за то что помог с этой всёй бедой...
;)

Psycho Tiger 26.12.2008 20:20

Цитата:

Сообщение от root.Unknown
Так дело в том что я и пишу во внешнем класе

Цитата:

Сообщение от root.Unknown
там надо было убрать "private"

Гхм, Вы уверены в правильности обоих высказываний?


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

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