Показать сообщение отдельно
Старый 16.10.2017, 08:01
Dzzirtuoz вне форума Посмотреть профиль Отправить личное сообщение для Dzzirtuoz Найти все сообщения от Dzzirtuoz
  № 1  
Ответить с цитированием
Dzzirtuoz

Регистрация: Apr 2014
Сообщений: 17
По умолчанию Баг с проверкой условия

Всем привет, столкнулся с какой-то мистикой.

В одном месте кода объявил массив с Булинами:
Код AS3:
    public var vantageTypes:Array = [[false], [false]];
В другом месте кода в зависимости от ситуации ячейки могут становиться true(знаю, очень примитивна реализация КНБ, в другом проекте решал изящней, но тут решил не париться):
Код AS3:
    private function vantageAttack(v:uint):void {
        if(char1.attack.attackTypes[v] == Attack.FAST_ATTACK){
            if(char2.attack.attackTypes[v] == Attack.STRONG_ATTACK) char1.attack.vantageTypes[v] = true;
            else if(char2.attack.attackTypes[v] == Attack.TECHNICAL_ATTACK) char2.attack.vantageTypes[v] = true;
        } else if(char1.attack.attackTypes[v] == Attack.STRONG_ATTACK){
            if(char2.attack.attackTypes[v] == Attack.TECHNICAL_ATTACK) char1.attack.vantageTypes[v] = true;
            else if(char2.attack.attackTypes[v] == Attack.FAST_ATTACK) char2.attack.vantageTypes[v] = true;
        } else if(char1.attack.attackTypes[v] == Attack.TECHNICAL_ATTACK){
            if(char2.attack.attackTypes[v] == Attack.FAST_ATTACK) char1.attack.vantageTypes[v] = true;
            else if(char2.attack.attackTypes[v] == Attack.STRONG_ATTACK) char2.attack.vantageTypes[v] = true;
        }
    }
В третьем месте идет проверка на истинность с выводом в консоль:
Код AS3:
        if(vantageTypes[0]){
            trace(vantageTypes[0]);
            vantageAttack(0);
            if(vantageTypes[1])vantageAttack(1);
        }
И если vantageTypes[0] == true, то логично что в консоле я вижу вывод true, однако если vantageTypes[0] == false, я в консоли вижу вывод false. Я в такой ситуации раньше не бывал, вообще не понимаю, почему я вижу в консоли false, если в таком случае этот блок кода даже не должен исполняться.

Проблема решается, если проверку делать следующим образом:
Код AS3:
        if(vantageTypes[0] == true){
            trace(vantageTypes[0]);
            vantageAttack(0);
            if(vantageTypes[1] == true)vantageAttack(1);
        }
Мне просто дико интересно, отчего и почему так происходит?