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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.12.2012, 14:36
bifidokk вне форума Посмотреть профиль Отправить личное сообщение для bifidokk Найти все сообщения от bifidokk
  № 1  
Ответить с цитированием
bifidokk
 
Аватар для bifidokk

Регистрация: Jan 2011
Сообщений: 200
По умолчанию Использование массива как стек

Использую массив как стек событий для пользователя в формате

Код AS3:
array({id, event})
когда приходит какое-либо событие, я проверяю, ждет ли юзер какое либо событие, если есть совпадение по id, то удаляю его из массива-стека, сую во временный, а далее во временном идет проверка на типы, т.к. событий может быть несколько. ну и далее по типам выполняется нужное. код поиска по массиву такой:

Код AS3:
        var eArray:Array = new Array();
        for(var i:int = 0; i < playersEvents.length; i++){
            if(playersEvents[i]['ePlayer'] == playerId){
                eArray.push(playersEvents[i]['eOptions']);
                playersEvents.splice(i, 1);
            }
        }
 
        return eArray;
собственно все было окей, пока события для одного юзера не стали идти друг за другом. и что получилось

допустим событие для меня находится в 1 и 2 индексе массива. когда я вытягиваю 1 и делаю splice, то 2ой индекс автоматически становится 1ым, i инкрементируется и к нему не возвращается, а идет ко 2му индексу, который раньше был третьим. т.е. просто перескакивает через второе мое событие.

как можно сделать так, чтобы событие после заключения во временный массив удалялось, но цикл шел дальше?

есть идея сделать так:
Код AS3:
 var eArray:Array = new Array();
        for(var i:int = 0; i < playersEvents.length;){
            if(playersEvents[i]['ePlayer'] == playerId){
                eArray.push(playersEvents[i]['eOptions']);
                playersEvents.splice(i, 1);
                continue;
            }
            i++;
        }
 
        return eArray;
Т.е. инкрементим, если это к нам не относится, если относится, то удаляем и проверяем снова данный элемент. Рационально ли это?

Старый 13.12.2012, 14:52
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Когда удалили элемент, пишем
Код AS3:
i--
Скажем на i=5 вы нашли нужный элемент, удалив его, элемент который имел индекс 6, сменил его на 5. Сделав i--, вы снова окажитесь на элементе с индексом 5.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 13.12.2012, 14:54
bifidokk вне форума Посмотреть профиль Отправить личное сообщение для bifidokk Найти все сообщения от bifidokk
  № 3  
Ответить с цитированием
bifidokk
 
Аватар для bifidokk

Регистрация: Jan 2011
Сообщений: 200
Цитата:
Сообщение от iNils Посмотреть сообщение
Когда удалили элемент, пишем
Код AS3:
i--
Скажем на i=5 вы нашли нужный элемент, удалив его, элемент который имел индекс 6, сменил его на 5. Сделав i--, вы снова окажитесь на элементе с индексом 5.
спасибо, этот вариант лучше)

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

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

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


 


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


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