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

Yulia_V 11.02.2013 21:40

Действие происходит лишь один раз.
 
При нажатии на кнопку объект становится видимым, а его анимация запускается, при повторном нажатии на ту же кнопку должно проходить обратное действие. Всё работает только 1 раз, а надо чтобы работало бесконечное количество нажатий.
Код AS3:

qw_cont.podsv.addEventListener(MouseEvent.CLICK, oMClick9);
function oMClick2(e:MouseEvent):void
{
                qw_cont.kryshka.play();
}
function oMClick9(e:MouseEvent):void
{
                qw_cont.plamia.play();
                qw_cont.plamia.visible = true;
                qw_cont.podsv.addEventListener(MouseEvent.CLICK, oMClick10);
                function oMClick10(e:MouseEvent):void
{
        qw_cont.plamia.stop();
        qw_cont.plamia.visible = false;
        qw_cont.podsv.removeEventListener(MouseEvent.CLICK, oMClick10);
}
qw_cont.podsv.removeEventListener(MouseEvent.CLICK, oMClick9);
}


Dip52 11.02.2013 22:26

Всё просто. Создай событие (нажатие кнопки мыши) и в нём условие: если объект видимый (и включай анимацию), то делай его невидимым (и отключай анимацию).

Код AS3:

//Определяю пакет:
package src
{
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
 
        //Определяю класс, который расширяет класс MovieClip:
        public class ChangeVisible extends MovieClip
        {
                //Определяю переменную экземпляра с ссылкой на объект MovieClip:
                var objectMovieClip:MovieClip = myObject;
                //Определяю конструктор класса:
                public function ChangeVisible()
                {
                        //Определяю событие MouseEvent: нажатие кнпоки мыши.
                        myObject.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
                }
                //Определяю метод экземпляра.
                private function mouseDown(event:MouseEvent):void
                {
                        //Определяю локальную переменную для выбранного объекта.
                        var lv:MovieClip = event.target;
 
                        //Если выбранный объект видимый, то:
                        if(lv.visible)
                        {
                                //Выключаю анимацию выбранного объекта:
                                lv.stop();
                                //Делаю его невидимым:
                                lv.visible = false;
                        }
                        //Если выбранный объект невидимый, то:
                        else
                        {
                                //Делаю его видимым:
                                lv.visible = true;
                                //Включаю анимацию выбранного объекта:
                                lv.play();
                        }
                }
        }
}


Asfel 11.02.2013 22:26

Код:

qw_cont.plamia.play();
заменить на
Код:

qw_cont.plamia.gotoAndPlay(0);

Dip52 11.02.2013 22:36

Цитата:

Сообщение от Asfel (Сообщение 1120287)
Код:

qw_cont.plamia.play();
заменить на
Код:

qw_cont.plamia.gotoAndPlay(0);

чтобы работало бесконечное количество нажатий.

Asfel 11.02.2013 22:45

Ну ладно добавить в
Код:

oMClick10
Код:

qw_cont.podsv.addEventListener(MouseEvent.CLICK, oMClick9);

caseyryan 11.02.2013 22:51

Тут надо избавиться от вложенной функции. Вложенные функции - зло.

Фактически, весь этот огород можно заменить вот на это:
Код AS3:

qw_cont.podsv.addEventListener(MouseEvent.CLICK, onClick);
function onClick(e:MouseEvent):void
{
  qw_cont.plamia.visible = !qw_cont.plamia.visible; // меняем видимость при каждом щелчке
        if (qw_cont.plamia.visible) {
                qw_cont.plamia.gotoAndPlay(0);
        } else {
                qw_cont.plamia.gotoAndStop(0);
        }       
 
}

Dip52, я уже не первый раз вижу ваши посты, с каким-то чудовищным количеством комментариев. Чисто из любопытства, зачем так много? Тем более что закомментированы очевиднейшие вещи.
Например это:
Код AS3:

//Делаю его невидимым:
lv.visible = false;

или это:
Код AS3:

//Определяю событие MouseEvent: нажатие кнпоки мыши.
myObject.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);

Понятно и без комментариев. Не нужно писать комментарии, если код сам говорит за себя. Это излишество. Они только мешают восприятию кода.

Asfel 11.02.2013 22:58

Надо но их там по видимому уже столько ("oMClick10") что избавляться от них в данном случае нет смысла. Нужно просто закончить то что там делается)

caseyryan 11.02.2013 23:02

Цитата:

что избавляться от них в данном случае нет смысла.
Не, все равно надо избавиться ) Да и вообще там эти функции лишние. Можно легко обойтись и одной.

Dip52 11.02.2013 23:04

Цитата:

Dip52, я уже не первый раз вижу ваши посты, с каким-то чудовищным количеством комментариев. Чисто из любопытства, зачем так много? Тем более что закомментированы очевиднейшие вещи.
Например это:
Код AS3:

//Делаю его невидимым:
lv.visible = false;

или это:
Код AS3:

//Определяю событие MouseEvent: нажатие кнпоки мыши.
myObject.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);

Понятно и без комментариев. Не нужно писать комментарии, если код сам говорит за себя. Это излишество. Они только мешают восприятию кода.
Вдруг моё понимание этого языка программирования от этого увеличится. :)

Asfel 11.02.2013 23:11

Цитата:

Сообщение от caseyryan (Сообщение 1120295)
Не, все равно надо избавиться ) Да и вообще там эти функции лишние. Можно легко обойтись и одной.

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

caseyryan 11.02.2013 23:15

Так проблема как раз в том, что вложенные функции все и усложняют.
Без них проще и понятнее.
Ну, собственно в 6 посте я уже написал как можно переделать )
Цитата:

Вдруг моё понимание этого языка программирования от этого увеличится.
Понимание увеличится как раз если научитесь понимать хотя бы такой код без комментариев.

Yulia_V 11.02.2013 23:38

caseyryan, КРУТО, спасибо огромное!
Asfel, хочу более сложным вещам научиться, но сейчас время сдачи проекта поджимает)

Добавлено через 2 минуты
caseyryan а можно спросить в каких случаях ещё этот восклицательный знак используется или ссылочку по теме?

dimarik 12.02.2013 00:23

http://help.adobe.com/ru_RU/FlashPla...ml#logical_NOT

Добавлено через 9 минут
Вот еще применение восклицательного знака.
Код AS3:

function foo(value:Bar!) {}


Yulia_V 12.02.2013 00:43

dimarik, спасибо.

Asfel 12.02.2013 16:06

Цитата:

Сообщение от dimarik (Сообщение 1120317)
Вот еще применение восклицательного знака.
Код AS3:

function foo(value:Bar!) {}


Что делает сия магия

NoisyFlasher 12.02.2013 16:50

Предположу, что функция принимает value, который может быть любого типа, кроме Bar.
Так?

Asfel 12.02.2013 16:54

видимо нет

caseyryan 12.02.2013 17:00

Цитата:

Что делает сия магия
Судя по всему ничего.

NoisyFlasher 12.02.2013 21:41

Да, добрался до компьютера, попробовал - ничего, функция срабатывает как обычно. Что я делаю не так?)


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

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