PDA

Просмотр полной версии : Баг с проверкой условия


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

В одном месте кода объявил массив с Булинами:

public var vantageTypes:Array = [[false], [false]];


В другом месте кода в зависимости от ситуации ячейки могут становиться true(знаю, очень примитивна реализация КНБ, в другом проекте решал изящней, но тут решил не париться):

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;
}
}


В третьем месте идет проверка на истинность с выводом в консоль:

if(vantageTypes[0]){
trace(vantageTypes[0]);
vantageAttack(0);
if(vantageTypes[1])vantageAttack(1);
}


И если vantageTypes[0] == true, то логично что в консоле я вижу вывод true, однако если vantageTypes[0] == false, я в консоли вижу вывод false. Я в такой ситуации раньше не бывал, вообще не понимаю, почему я вижу в консоли false, если в таком случае этот блок кода даже не должен исполняться.

Проблема решается, если проверку делать следующим образом:

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