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

ruzi 06.11.2011 15:36

Условия
 
Что не так в моих правилах, у меня он определяется и как первый и как второй

Код AS3:

 
private function mouseMove (e:MouseEvent):void
{
        if (((e.localX >= 0) && (e.localX < 50)) && ((e.localY >= 0) && (e.localY < 50)))
        {       
                _selection.x = 0;
                _selection.y = 0;
        }
 
        if (((e.localX >= 0) && (e.localX < 50)) && ((e.localY >= 50) && (e.localY < 100)))
        {
                _selection.x = 0;
                _selection.y = 50;
        }
}


goodguy 06.11.2011 15:45

Если должно выполняться первое условие, и при этом игнорироваться второе, то для второго условия нужно использовать оператор else if, а не if
иначе проверяются оба, и если оба true, соответственно и оба блока коды будут выполнены.

п.с. Название темы не раскрывает сути вопроса.

ruzi 06.11.2011 15:52

Суть, что они должны выполняться либо, одно либо второе.
При нахождении мыши на поле отслеживается положение курсора, и меняется положение объекта.
А я кажется понял, надо проверять на каком объекте отслеживается положение мыши.
Попробую может получится.
Спасибо.

strangedk 06.11.2011 15:53

Всё работает, только неясно, так ли вам нужно:

Код AS3:

import flash.events.MouseEvent;
 
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove_handler);
 
function onMouseMove_handler (e:MouseEvent):void {
        if (((e.localX >= 0) && (e.localX < 50)) && ((e.localY >= 0) && (e.localY < 50))) {       
                // от 0:0 до 50:50
                trace("first " + e.localX + ":" + e.localY);
        }
 
        if (((e.localX >= 0) && (e.localX < 50)) && ((e.localY >= 50) && (e.localY < 100))) {
                // от 0:50 до 50:100
                trace("second " + e.localX + ":" + e.localY);               
        }
}

[IMG]http://i32.***********/big/2011/1106/51/c26e11b0caeab28c287fbc3ff8878351.jpg[/IMG]

Цитата:

либо, одно либо второе
Оно и так либо одно, либо второе.

Ookami 06.11.2011 15:55

Они оба не могут быть TRUE в данном контексте... Условие можно немного упростить, слишком много скобок, они тут лишние. Ну и само собой да, лучше использовать else if, например так:
Код AS3:

if ((e.localX >= 0) && (e.localX < 50) && (e.localY >= 0) && (e.localY < 50)) {        
                _selection.x = 0;
                _selection.y = 0;
        } else if ((e.localX >= 0) && (e.localX < 50) && (e.localY >= 50) && (e.localY < 100)) {
                _selection.x = 0;
                _selection.y = 50;
        }

А вот почему срабатывают оба условия - не понятно, по идее не должны - одно из них все-равно будет ложным.

Newred 06.11.2011 16:07

Я предлагаю сделать что то такое вместо громоздких if -else:
Код AS3:

private function mouseMove (e:MouseEvent):void 
{       
        _selection.x = Math.floor(e.localX/50) * 50 ;
        _selection.y = Math.floor(e.localY/50) * 50 ;
}


ruzi 06.11.2011 16:46

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

Newred 06.11.2011 16:49

Цитата:

...и положение курсора отслеживается уже на квадрате.
Тогда слушатели назначь не на квадрат, а на stage или контейнер

ruzi 06.11.2011 16:52

Так и сделал
Код AS3:

stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);

Добавлено через 11 минут
У меня получилось, а на сколько обоснованно и какие проблемы могут возникнуть при том что я использую mouseX и mouseY

Код AS3:

private function mouseMove (e:MouseEvent):void
{
        if (((mouseX >= 0) && (mouseX < 50)) && ((mouseY >= 0) && (mouseY < 50)))
        {       
                _selection.x = 0;
                _selection.y = 0;
        }
        if (((mouseX >= 0) && (mouseX < 50)) && ((mouseY >= 50) && (mouseY < 100)))
        {
                _selection.x = 0;
                _selection.y = 50;
        }
}

Добавлено через 20 минут
А теперь подскажите пожалуйста, а как лучше всего проверку выполнять, если поле 500 на 500 px.

Newred 06.11.2011 17:29

Цитата:

А теперь подскажите пожалуйста, а как лучше всего проверку выполнять, если поле 500 на 500 px.
Замени в моём примере
Код AS3:

e.LocalX на mouseX
e.LocalY на mouseY



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

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