Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   приложение с условием if(need help) (http://www.flasher.ru/forum/showthread.php?t=170790)

jediff 02.11.2011 02:29

приложение с условием if(need help)
 
Например есть 2 объекта. один крассный второй черный. Также есть динамическое текстовое поле. При наведении на красный объект в динамическом поле появляеться текст " Красный". Аналогично с другим объектом. Как это выполнить с помощью условия if. ??

Wolsh 02.11.2011 02:35

Код AS3:

this.addEventListener(MouseEvent.MOUSE_OVER, handlerOver);
function handlerOver(event:MouseEvent):void
{
        if(event.target == red)
        {
                _txt.text = "Красный";
        }
        else
        {
                _txt.text = "Черный";
        }
}


jediff 02.11.2011 13:22

Спасибо, всё понятно

только теперь такой вопрос, как сделать так что бы если курсор мыши не над объетами то динамическое поле становилось пустом, тоесть сейчас если навести курсор и убрать то динамическое поле всё равно остаёться с текстом. Что в условиях нужно писать?

Vektor 02.11.2011 14:03

Код AS3:

this.addEventListener(MouseEvent.MOUSE_OUT, handlerOut);
function handlerOut(event:MouseEvent):void
{
 
        _txt.text = "";
}


jediff 02.11.2011 14:52

Благодарю

goodguy 02.11.2011 15:14

Лучше использовать ROLL_OVER и ROLL_OUT вместо MOUSE_OVER / MOUSE_OUT в данном случае

kackbip 02.11.2011 15:55

Цитата:

Сообщение от goodguy (Сообщение 1043207)
Лучше использовать ROLL_OVER и ROLL_OUT вместо MOUSE_OVER / MOUSE_OUT в данном случае

Да. В случае с MOUSE_OUT и MOUSE_OVER будет ловиться события не только от объекта но и от объектов, которые находятся внутри него.

dsQuadro 02.11.2011 16:16

Цитата:

Лучше использовать ROLL_OVER и ROLL_OUT вместо MOUSE_OVER / MOUSE_OUT в данном случае
а кто нибудь может объяснить в чем разница?

carrotoff 02.11.2011 16:23

Обработчики для ROLL_OVER и ROLL_OUT реагируют на события только объекта, подписавшегося на них.
Обработчики для MOUSE_OVER и MOUSE_OUT реагируют на события самого объекта, подписавшегося на них, и на события объектов, вложенных в него.

dsQuadro 02.11.2011 16:46

но тогда получается roll_over надо ставить слушатель на каждый обьект, и не получится поставить один слушатель только на родителя?

carrotoff 02.11.2011 17:05

Цитата:

но тогда получается roll_over надо ставить слушатель на каждый обьект, и не получится поставить один слушатель только на родителя?
Я ничего не понял

Wolsh 02.11.2011 17:27

Цитата:

Я ничего не понял
Читайте про всплытие событий в контейнерах.
Если у Вас в Спрайте 16 мелких объектов, Вы можете подписаться на события от Спрайта, и он будет поставлять их при интеракции с любым из этих объектов. В единственном обработчике Вы можете поступить с таргетом как Вам вздумается. В случае ролловера таргетом будет сам Спрайт, и узнать, на кого конкретно из его детей Вы наехали, не получится. Чтобы разделять события детей при использовании ролловера, надо каждому ребенку назначать отдельного слушателя.

carrotoff 02.11.2011 17:30

Цитата:

Сообщение от Wolsh (Сообщение 1043241)
Если у Вас в Спрайте 16 мелких объектов, Вы можете подписаться на события от Спрайта, и он будет поставлять их при интеракции с любым из этих объектов. В единственном обработчике Вы можете поступить с таргетом как Вам вздумается. В случае ролловера таргетом будет сам Спрайт, и узнать, на кого конкретно из его детей Вы наехали, не получится. Чтобы разделять события детей при использовании ролловера, надо каждому ребенку назначать отдельного слушателя.

Это я знаю. Я не понял чего хочет добиться мною процитированный человек.
Просто человек просил объяснить разницу между ролловером и маусовером.

Проще говоря, хотите ловить детей - подписывайтесь на маусовер, сам контейнер - ролловер.

Wolsh 02.11.2011 17:33

Странно. Вроде мы с ним точь-в-точь об одном и том же говорим.
Вернитесь к моему первому сообщению на первой странице, и посмотрите, "куда" добавлен слушатель MOUSE_OVER. На this. Не на черный клип, не на красный клип, а на их родителя. Это был ответ на вопрос топикстартера - "как использовать if". С ролловером использовать if - никак, ибо нет вариантов.

Добавлено через 3 минуты
Хотя вру, можно и с ролловером)) Если принимать события в один обработчик от всех, разных, объектов, и разбирать уже там. То есть addEventListener(MouseEvent.ROLL_OVER, ...) делать каждому, а разбирать в одном хендлере.

carrotoff 02.11.2011 17:38

а ну в этом и есть моя вина, ибо я отвечал не топикстартеру, а товарищу dsQuadro на вопрос:
Цитата:

а кто нибудь может объяснить в чем разница?
Наверно, стоило внимательней читать всю тему

Wolsh 02.11.2011 17:39

Не "сам", а "только". При маусовере контейнер также доступен, только не как таргет а как currentTarget, ибо на события от него была подписка.

carrotoff 02.11.2011 17:43

Воистину. Ровно тоже самое хотел донести. Конечно, не столь подробно.
Рассматривайте моё "сам" как Ваше "только".

dsQuadro 02.11.2011 18:20

Цитата:

Если у Вас в Спрайте 16 мелких объектов, Вы можете подписаться на события от Спрайта, и он будет поставлять их при интеракции с любым из этих объектов. В единственном обработчике Вы можете поступить с таргетом как Вам вздумается. В случае ролловера таргетом будет сам Спрайт, и узнать, на кого конкретно из его детей Вы наехали, не получится. Чтобы разделять события детей при использовании ролловера, надо каждому ребенку назначать отдельного слушателя.
значит я правильно понял... благодарю!

dimarik 02.11.2011 22:45

Цитата:

Сообщение от carrotoff (Сообщение 1043227)
Я ничего не понял

Цитата:

Сообщение от jediff (Сообщение 1043088)
Например есть 2 объекта. один крассный

Я все понял.

carrotoff 03.11.2011 10:47

Я ничего не понял в силу своей невнимательности, ибо для меня обсуждение темы началось с поста #8. С сего момента обязуюсь читать темы полностью.

jediff 04.11.2011 23:20

ого какая дискуссия поднялась )

ребя помогите еще , такая вот задачка:

есть объект - прямоугольник (имя экземпляра напрмиер "block");
есть динамическое текстовое поле ( имя экземпляра например "textstring");
задача : при клике на объект он сдвигался на 5 пикселей по +х оси , сделать это конечно не проблема, главная задача - что разрешено только 4 клика по объекту и когда идёт 5 клик объект не двигался , не возвращался в начальное положение, а стоял на месте и в текстовом поле светилось что то вроде (" попыток больше нет" );

Thx*

Wolsh 04.11.2011 23:35

А Вы пока мультики посмотрите? Так "задачки" это в Вакансии. А здесь – код ваших попыток и цитаты ошибок компилятора. Можно с вопросами.

Ookami 05.11.2011 00:02

Создать счетчик, при клике на объект проверять его значение, и если оно меньше 5 то увеличивать на 1 и двигать объект, иначе сообщать что попытки кончились

jediff 06.11.2011 16:05

пытался делать вот так, компилятор ошибок не даёт но и действие абсолютно не выполняеться, да я и сам понимаю что здесь что то не так, добейте мой код пожалуйста.

Код AS3:

var figure:int = 4;
 
figura1.addEventListener (MouseEvent.CLICK, first);
 
function first (e:MouseEvent) : void {
        if ( figure<4) {
                figure++;
                figura1.x+=5;
        }
}

Добавлено через 8 минут
попробовал через цикл for - действие начало выполняться но не 4 раза а бесконечно при каждом клике
figura1 - это объект (прямоугольник)

Код AS3:

figura1.addEventListener (MouseEvent.CLICK, first);
 
function first (e:MouseEvent) : void {
for (var a:int=0; a<5; a=a+1)
{
    figura1.x+=5;
 
}
}


Wolsh 06.11.2011 16:19

Код AS3:

var figure:int = 0;


jediff 06.11.2011 16:25

Цитата:

Сообщение от Wolsh (Сообщение 1044149)
Код AS3:

var figure:int = 0;


Спасибо огромное, работает.


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

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