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

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

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

Регистрация: Nov 2013
Сообщений: 47
По умолчанию Получение последних добавленных элементов массива

У меня имеется один массив уровней, в который в зависимости от того как много игрок прошел уровней добавляются элементы. Мне нужно получить новые добавленные элементы и вызвать dispatchEvent для того чтобы показать столько всплывающих окон, сколько было пройдено новых уровней. Только у меня всегда получается возвращает тот же массив, что и исходный. Это вся нижняя конструкция описана в методе update, который через 1 секунду берет новое обновленное значение с сервера, своего рода таймер.

Код AS3:
var levels:Array = _data.newlevels;
var currLength:int = 0;
var newlevels:Array;
if (currLength != levels.length)
{
    newlevels = levels.slice(currLength, levels.length);
    currLength = levels.length;
}
Например, массив
Код:
newlevels = [{"level":"5","water":"100"},{"level":6,"water":"100"}]}
Затем добавили один элемент в levels
Код:
levels = [{"level":"5","water":"100"},{"level":6,"water":"100"},{"level":"7","water":"100"}]}
И в массив newlevels нужно записать только последние добавленные элементы. В данном случае добавлен один элемент.

Старый 29.05.2014, 04:16
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Не читая , что написали :
Код AS3:
var arr:Array = [ 1 , 2 , 3 ];
var addedArray:Array = [];
function addLevel(i:int) :void
{
    arr.push(i);
    addedArray.push(i);
    dispatchEvent(.... i)
}
__________________
Марк Tween

Старый 29.05.2014, 12:10
helio вне форума Посмотреть профиль Отправить личное сообщение для helio Найти все сообщения от helio
  № 3  
Ответить с цитированием
helio

Регистрация: Nov 2013
Сообщений: 47
Не вы не поняли. Массив _data.newlevels приходит с сервера. И мне нужно взять лишь измененные данные, а не весь массив со старыми элементами.

Старый 29.05.2014, 13:04
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Эта конструкция нелепа по самой структуре. Ее надо полностью изменить.
Либо присылайте с сервера не весь массив, а только новые элементы (мне вообще не понятно зачем каждый раз шлется весь массив), либо храните 2 массива, один с новыми, другой с существующими элементами
__________________
Ко мне можно и нужно обращаться на ты)

Старый 29.05.2014, 18:39
helio вне форума Посмотреть профиль Отправить личное сообщение для helio Найти все сообщения от helio
  № 5  
Ответить с цитированием
helio

Регистрация: Nov 2013
Сообщений: 47
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Эта конструкция нелепа по самой структуре. Ее надо полностью изменить.
Либо присылайте с сервера не весь массив, а только новые элементы (мне вообще не понятно зачем каждый раз шлется весь массив), либо храните 2 массива, один с новыми, другой с существующими элементами
вы правы неудачная модель. Исправил. Но вот не до конца догоняю, как реализовать такое, что показывать окна столько раз, сколько элементов содержится в массиве и менять текст в этом окне, в зависимости от того какой элемент массива в данный момент обрабатывается.

У меня есть метод, который отвечает за создание таких popup. Но при диспатчинге у меня вызывается данный метод лишь единожды. Т.е. мне нужен массив отложенных событий, чтобы они возникали, после того как другое событие отработано. На тех же окнах, показывать следующее окно, как закрыли предыдущее.

Main.as
Код AS3:
addEventListener(NEW_RANK, newRankHandler);
private function newRankHandler():void
{
    showStdPopUp(); // метод по показу popup
}
User.as
Код AS3:
private function updateRank():void
{
    var newlevels:Array = _data.newlevels;
 
    for (var i:int = 0; i < newlevels.length; i++)
    {
        dispatchEvent(new UIEvent(NEW_RANK)); // Вызывать событие показа окна, столько раз, сколько элементов содержится в массиве newlevels.
    }
}


Последний раз редактировалось helio; 30.05.2014 в 13:49.
Старый 29.05.2014, 19:37
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Что-то я не могу понять в чем проблема. Создаем первое окно из массива. Когда оно закрывается, то шлет событие, к примеру WindowEvent.CLOSE, по этому событию делается array.shift() и снова создается окно с нулевого индекса массива, и оно так же подписывается на событие WindowEvent.CLOSE (ну или какое-то другое, не важно). И так до тех пор, пока массив не опустеет
__________________
Ко мне можно и нужно обращаться на ты)

Старый 30.05.2014, 13:08
helio вне форума Посмотреть профиль Отправить личное сообщение для helio Найти все сообщения от helio
  № 7  
Ответить с цитированием
helio

Регистрация: Nov 2013
Сообщений: 47
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Что-то я не могу понять в чем проблема. Создаем первое окно из массива. Когда оно закрывается, то шлет событие, к примеру WindowEvent.CLOSE, по этому событию делается array.shift() и снова создается окно с нулевого индекса массива, и оно так же подписывается на событие WindowEvent.CLOSE (ну или какое-то другое, не важно). И так до тех пор, пока массив не опустеет
Не все так просто. У меня есть класс WindowManager, в котором есть методы по показу и закрытию окон. Там есть так же массив _showedWindows открытых в данный момент окон. Так вот при диспатчинге кастомного события в классе User, например, 5 раз, массив _showedWindows увеличиться до 5. И эти окна будут сразу показаны друг под другом. Только вот методы showWnd класса WindowManager отработает 5 раз и все и не будет ждать пока закроется какое-то окно.


Последний раз редактировалось helio; 30.05.2014 в 18:02.
Старый 30.05.2014, 13:53
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
А как это противоречит тому, что я сказал? Однозначно надо переписывать этот WindowManager, чтобы он умел это делать. Заставить его ждать закрытие предыдущего окна, перед открытием нового
__________________
Ко мне можно и нужно обращаться на ты)

Старый 30.05.2014, 15:01
helio вне форума Посмотреть профиль Отправить личное сообщение для helio Найти все сообщения от helio
  № 9  
Ответить с цитированием
helio

Регистрация: Nov 2013
Сообщений: 47
Цитата:
Сообщение от caseyryan Посмотреть сообщение
А как это противоречит тому, что я сказал? Однозначно надо переписывать этот WindowManager, чтобы он умел это делать. Заставить его ждать закрытие предыдущего окна, перед открытием нового
все разобрался


Последний раз редактировалось helio; 30.05.2014 в 18:02.
Создать новую тему Ответ Часовой пояс GMT +4, время: 23:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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