![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 90
|
Впервые столкнулся с этим на as2, на 3й версии таких вещей я не наблюдал. Есть вот такое условие в событии onMouseUp:
Проблема заключается в том, что всегда сначала выполняется альтернативное условие и только потом главное. Причем даже когда главное условие вполне выполнимо, я всеравно получаю в окне трассера сначала "-" и только потом "+". А если вынести temp.Destroy(); и temp = null; под условие, что было бы логично для упрощения кода, то сначала выполнятся вообще эти две строчки. Тоесть все работает задом-наперед. Может просто я уже сплю и чего-то не понимаю, подскажите) |
|
|||||
|
Явно уже спите
![]() Булева алгебра. Приоритет выполнения логических операций. if (то-то && (то-то == undefined || то-то == null || то-то == temp)) Какая-то странаня конструкция. Если "то-то" - булевая, то условия всегда FALSE, если оно НЕ булевое, то и подавно false и вообще оно не будет нормально работать ![]() |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 90
|
Нет, там все нормально, иначе я бы не получал трассера из этого блока. Вот эта строка:
if (CheckItem(temp) && (this.child == undefined || this.child == null || this.child == temp)) CheckItem и возвращает булево значение, я просто сократил код за ненадобностью, трассер-то работает. Прочитайте внимательно, пожалуйста, мой пост - я получаю оба трассера. Кроме того, если убрать альтернативный блок после else, то все будет работать как надо. Еще такая вещь - если добавить в else каких-нибудь бессмысленных условий, но чтобы их было много, то последовательность выполнения становится нормальной. Неужели компилятор бросается выполнять сначала то, что проще? Последний раз редактировалось HorusWM; 29.04.2011 в 12:05. |
|
|||||
|
[+1 23.05.11]
Регистрация: Dec 2001
Сообщений: 4,159
|
Для начала добавьте trace перед первым if'ом, чтобы убедиться, что код вызывается только один раз. Есть вероятность, что Вы получаете два вызова -- в первом попадаете во второй блок, во втором -- в первый.
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 90
|
Да, все верно, само событие onMouseUp вызывается на всех инстансах класса, которые находятся на сцене. Этого можно как-то избежать?
|
|
|||||
|
не цепляйте onMouseUp на ВСЕ инстансы....
или выполняйте только для активного элемента... |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 90
|
Мм.. Я пишу в классах - это событие у меня прописано сразу. Инстансы этого класса и создаются на сцене, каждый с приаттаченным мувиком. Пробовал вешать слушателем как в кадре и удалять его, но компилятор ругается, мол, нельзя так в классе делать.
Все, разобрался - создал вложенную функцию onMouseUp в функции onMouseDown с условием фокуса на определенном мувике. За идею благодарен обоим, спасибо. Последний раз редактировалось HorusWM; 29.04.2011 в 13:53. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|