Всем привет, столкнулся с какой-то мистикой.
В одном месте кода объявил массив с Булинами:
Код 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);
}
Мне просто дико интересно, отчего и почему так происходит?