Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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);
        }
Мне просто дико интересно, отчего и почему так происходит?

Старый 16.10.2017, 08:18
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 2  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
А если сделать не массив массивов, а массив булевых значений?

Цитата:
[[false], [false]] -> [false, false]

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

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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