Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.04.2011, 02:44
HorusWM вне форума Посмотреть профиль Отправить личное сообщение для HorusWM Найти все сообщения от HorusWM
  № 1  
Ответить с цитированием
HorusWM

Регистрация: Sep 2010
Сообщений: 90
По умолчанию Последовательность выполнения условий

Впервые столкнулся с этим на as2, на 3й версии таких вещей я не наблюдал. Есть вот такое условие в событии onMouseUp:
Код AS1/AS2:
if (то-то && (то-то == undefined || то-то == null || то-то == temp))
{
    trace("+");
    Add(temp._name);
    temp.Destroy();
    temp = null;
}
else if (temp != null)
{
    trace("-");
    temp.base.Add(temp._name);
    temp.Destroy();
    temp = null;
}
Проблема заключается в том, что всегда сначала выполняется альтернативное условие и только потом главное. Причем даже когда главное условие вполне выполнимо, я всеравно получаю в окне трассера сначала "-" и только потом "+". А если вынести temp.Destroy(); и temp = null; под условие, что было бы логично для упрощения кода, то сначала выполнятся вообще эти две строчки. Тоесть все работает задом-наперед. Может просто я уже сплю и чего-то не понимаю, подскажите)

Старый 29.04.2011, 03:12
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 2  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Явно уже спите
Булева алгебра. Приоритет выполнения логических операций.

if (то-то && (то-то == undefined || то-то == null || то-то == temp))

Какая-то странаня конструкция. Если "то-то" - булевая, то условия всегда FALSE, если оно НЕ булевое, то и подавно false и вообще оно не будет нормально работать
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 29.04.2011, 12:02
HorusWM вне форума Посмотреть профиль Отправить личное сообщение для HorusWM Найти все сообщения от HorusWM
  № 3  
Ответить с цитированием
HorusWM

Регистрация: Sep 2010
Сообщений: 90
Нет, там все нормально, иначе я бы не получал трассера из этого блока. Вот эта строка:
if (CheckItem(temp) && (this.child == undefined || this.child == null || this.child == temp))
CheckItem и возвращает булево значение, я просто сократил код за ненадобностью, трассер-то работает. Прочитайте внимательно, пожалуйста, мой пост - я получаю оба трассера. Кроме того, если убрать альтернативный блок после else, то все будет работать как надо.
Еще такая вещь - если добавить в else каких-нибудь бессмысленных условий, но чтобы их было много, то последовательность выполнения становится нормальной. Неужели компилятор бросается выполнять сначала то, что проще?


Последний раз редактировалось HorusWM; 29.04.2011 в 12:05.
Старый 29.04.2011, 12:37
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 4  
Ответить с цитированием
Crazy
[+1 23.05.11]
 
Аватар для Crazy

Регистрация: Dec 2001
Сообщений: 4,159
Цитата:
Сообщение от HorusWM Посмотреть сообщение
Неужели компилятор бросается выполнять сначала то, что проще?
Для начала добавьте trace перед первым if'ом, чтобы убедиться, что код вызывается только один раз. Есть вероятность, что Вы получаете два вызова -- в первом попадаете во второй блок, во втором -- в первый.
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++

Старый 29.04.2011, 13:14
HorusWM вне форума Посмотреть профиль Отправить личное сообщение для HorusWM Найти все сообщения от HorusWM
  № 5  
Ответить с цитированием
HorusWM

Регистрация: Sep 2010
Сообщений: 90
Да, все верно, само событие onMouseUp вызывается на всех инстансах класса, которые находятся на сцене. Этого можно как-то избежать?

Старый 29.04.2011, 13:21
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 6  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
не цепляйте onMouseUp на ВСЕ инстансы....
или выполняйте только для активного элемента...
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 29.04.2011, 13:24
HorusWM вне форума Посмотреть профиль Отправить личное сообщение для HorusWM Найти все сообщения от HorusWM
  № 7  
Ответить с цитированием
HorusWM

Регистрация: Sep 2010
Сообщений: 90
Мм.. Я пишу в классах - это событие у меня прописано сразу. Инстансы этого класса и создаются на сцене, каждый с приаттаченным мувиком. Пробовал вешать слушателем как в кадре и удалять его, но компилятор ругается, мол, нельзя так в классе делать.

Все, разобрался - создал вложенную функцию onMouseUp в функции onMouseDown с условием фокуса на определенном мувике.

За идею благодарен обоим, спасибо.


Последний раз редактировалось HorusWM; 29.04.2011 в 13:53.
Создать новую тему Ответ Часовой пояс GMT +4, время: 00:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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