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

Riki 24.09.2012 00:16

Не работают двойные условия?
 
Здраствуйте, не работает часть кода где начинается двойной условие, там выбивается такие ошибки:
Монтажный кадр 1, слой "code", кадр 1, строка 120 1084: Синтаксическая ошибка: identifier перед logicaland.
Монтажный кадр 1, слой "code", кадр 1, строка 120 1084: Синтаксическая ошибка: semicolon перед rightparen.
Монтажный кадр 1, слой "code", кадр 1, строка 123 1083: Синтаксическая ошибка: else не ожидается
Монтажный кадр 1, слой "code", кадр 1, строка 126 1083: Синтаксическая ошибка: else не ожидается


Код AS1/AS2:

function chekim (e:Event):void
{
if (wallLeft.hitTestObject(player as DisplayObject))
{
movingLeft = false;
trace(movingLeft);
}else if (wallDown.hitTestObject(player as DisplayObject)){
        movingDown = false;
        trace(movingDown);
} else if (wallRight.hitTestObject(player as DisplayObject)){
        movingRight = false;
        trace(movingRight);
} else if (wallUp.hitTestObject(player as DisplayObject)){
        movingUp = false;
        trace(movingUp);
} else if (wallUp.hitTestObject(player as DisplayObject)) && (wallleft.hitTestObject(player as DisplayObject)){
        movingUp = false;
        movingLeft = false;
} else if ((wallUp.hitTestObject(player as DisplayObject)) && (wallRight.hitTestObject(player as DisplayObject))){
        movingUp = false;
        movingRight = false;
} else if (wallDown.hitTestObject(player as DisplayObject)) && (wallLeft.hitTestObject(player as DisplayObject)){
        movingDown = false;
        movingLeft = false;
} else if (wallDown.hitTestObject(player as DisplayObject)) && (wallRight.hitTestObject(player as DisplayObject)){
        movingRight = false;
        movingDown = false;
}
}

В чем ошибка? Заранее благодарен.

GBee 24.09.2012 00:29

Код AS3:

if (wallDown.hitTestObject(player as DisplayObject)) && (wallLeft.hitTestObject(player as DisplayObject))

Скобку рано закрыли

Код AS3:

if (wallDown.hitTestObject(player as DisplayObject) && (wallLeft.hitTestObject(player as DisplayObject)))

Да и не только здесь. Компилятор все правильно рассказывает.

bav 24.09.2012 00:32

В трех местах. Используйте редактор с подсветкой.
Код AS3:

function chekim (e:Event):void
{
        if (wallLeft.hitTestObject(player as DisplayObject))
        {
                movingLeft = false;
                trace(movingLeft);
        }else if (wallDown.hitTestObject(player as DisplayObject)){
                movingDown = false;
                trace(movingDown);
        } else if (wallRight.hitTestObject(player as DisplayObject)){
                movingRight = false;
                trace(movingRight);
        } else if (wallUp.hitTestObject(player as DisplayObject)){
                movingUp = false;
                trace(movingUp);
        // Вот здесь не хватает скобок
        } else if (wallUp.hitTestObject(player as DisplayObject)) && (wallleft.hitTestObject(player as DisplayObject)){
                movingUp = false;
                movingLeft = false;
        } else if ((wallUp.hitTestObject(player as DisplayObject)) && (wallRight.hitTestObject(player as DisplayObject))){
                movingUp = false;
                movingRight = false;
        // Здесь
        } else if (wallDown.hitTestObject(player as DisplayObject)) && (wallLeft.hitTestObject(player as DisplayObject)){
                movingDown = false;
                movingLeft = false;
        // и здесь
        } else if (wallDown.hitTestObject(player as DisplayObject)) && (wallRight.hitTestObject(player as DisplayObject)){
                movingRight = false;
                movingDown = false;
        }
}


fish_r 24.09.2012 01:01

Код AS3:

if ( wallLeft.hitTestObject( player as DisplayObject ) ){
        movingLeft = false;
        trace( movingLeft );
}else if ( wallDown.hitTestObject( player as DisplayObject ) ){
        movingDown = false;
        trace( movingDown );
} else if ( wallRight.hitTestObject( player as DisplayObject ) ){
        movingRight = false;
        trace(movingRight);
} else if ( wallUp.hitTestObject( player as DisplayObject ) ){
        movingUp = false;
        trace(movingUp);
} else if ( wallUp.hitTestObject( player as DisplayObject ) &&
                                wallleft.hitTestObject( player as DisplayObject ) ){
        movingUp = false;
        movingLeft = false;
} else if ( wallUp.hitTestObject( player as DisplayObject ) &&
                                wallRight.hitTestObject( player as DisplayObject ) ){
        movingUp = false;
        movingRight = false;
} else if ( wallDown.hitTestObject( player as DisplayObject ) &&
                                wallLeft.hitTestObject( player as DisplayObject ) ){
        movingDown = false;
        movingLeft = false;
} else if ( wallDown.hitTestObject( player as DisplayObject ) &&
                                wallRight.hitTestObject( player as DisplayObject )){
        movingRight = false;
        movingDown = false;
}


Riki 24.09.2012 01:06

Всем спасибо за ответы, а ответьте пожалуйста почему эти двойные условия не выполняются? То есть врезание в левую стену оно фиксирует, а верхнюю уже нет, и оно продолжает пролетать...

fish_r 24.09.2012 01:12

непонятно зачем вы проверяете по нескольку раз, условия с "&&" не нужны

Riki 24.09.2012 01:16

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

fish_r 24.09.2012 01:17

для кого я писал?

Riki 24.09.2012 01:19

Такая проверка необходима на углах, где стены пересекаются.

fish_r 24.09.2012 01:30

вы дублируете проверки, вот я о чем. если для левой стены проверка проведена и значение выставлено в false, то ниже уже не нужно эту проверку проводить (даже в сочетании с другими сторонами ), справедливо это и для всех остальных сторон.

то есть такое выражение:
Код AS3:

 
if ( wallLeft.hitTestObject( player as DisplayObject ) ){
        movingLeft = false;
        trace( movingLeft );
}
 
if ( wallDown.hitTestObject( player as DisplayObject ) ){
        movingDown = false;
        trace( movingDown );
}
 
if ( wallRight.hitTestObject( player as DisplayObject ) ){
        movingRight = false;
        trace(movingRight);
}
 
if ( wallUp.hitTestObject( player as DisplayObject ) ){
        movingUp = false;
        trace(movingUp);
}

эквивалентно тому что писалось выше


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

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