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

Dzzirtuoz 16.10.2017 08:01

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

В одном месте кода объявил массив с Булинами:
Код 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);
        }

Мне просто дико интересно, отчего и почему так происходит?

illuzor 16.10.2017 08:18

А если сделать не массив массивов, а массив булевых значений?

Цитата:

[[false], [false]] -> [false, false]

Dzzirtuoz 16.10.2017 08:40

Цитата:

Сообщение от illuzor (Сообщение 1202415)
А если сделать не массив массивов, а массив булевых значений?

Ой, я дурашка!!! Вся мистика заключается в самообмане. При последнем баге, мне показалось, что баг возникает из-за того, что вариант [false, false] - неправильный вариант объявления массива. Баг от этого не пропал, но вернуть правильное объявление массива обратно - не вернул, а баг позже исправил. Серьезная лажа, только не думайте обо мне из-за этого плохо, ладно?))
Спасибо вам большое за помощь. И все-таки забавно вышло)


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

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