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

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

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

Регистрация: Sep 2012
Сообщений: 204
По умолчанию Разбиение и совмещение массивов

Добрый вечер.

Что то я совсем запутался в методе splice. ситуация такая: Есть 6 элементов в массиве. Каждый по отдельности анимируется и в какой то момент 1 элемент уходит из ряда. Идет смещение всех элементов что находятся справа, а далее тот элемент который пропал появляется в конце ряда справа.
С этой частью никаких проблем, но вот далее мне необходимо обновить последовательность этих элементов, чтобы в массиве они стояли также как слева направо после перестановки.
Как я понимаю, это делается через splice

Код AS3:
var ran:int = randomRange(4, 0);
			ballArr[ran].hide();
			TweenLite.to(ballArr[ran], 0, { overwrite:false, delay:2, x:posArr[5]} )
 
			for (var i:int = ran + 1; i < ballArr.length; i++) {
				TweenLite.to(ballArr[i], 1, {x:posArr[i - 1]});
			}
			// тут все в порядке, все встает на нужные места
//далее делим массив ballArr
			var splicedAlone:Array = ballArr.splice(ran, 1);  //тот что пропадает
			var spliced:Array = ballArr.splice(ran + 1, ballArr.length);   //те что были справа от изчезнущего 
 
			trace ("ballArr "+ballArr +"dlina "+ballArr.length); //ballArr [object Ball]dlina 1
			trace ("alone "+splicedAlone+"dlina "+splicedAlone.length);  //alone [object Ball]dlina 1
			trace ("ostatok " + spliced + "dlina " + spliced.length); //ostatok [object Ball],[object Ball],[object Ball],[object Ball]dlina 4
			ballArr.splice(ballArr.length-1, 0, spliced); // пытаюсь добавить те что были справа
			ballArr.splice(ballArr.length-1, 0, splicedAlone);  //тот что изчезал
 
			trace ("ballArr "+ballArr +"dlina "+ballArr.length); // ballArr [object Ball],[object Ball],[object Ball],[object Ball],[object Ball],[object Ball],[object Ball],[object Ball],[object Ball]dlina 3
			trace ("alone "+splicedAlone+"dlina "+splicedAlone.length); //alone [object Ball]dlina 1
			trace ("ostatok " + spliced + "dlina " + spliced.length);//ostatok [object Ball],[object Ball],[object Ball],[object Ball]dlina 4
Трейс показан при ran = 1;
Кстати даже если получилось бы соединить 2 массива, колличество элементов не было бы нужным мне. Их по прежнему должно быть 6, но если например разрезали на 3 х 1 х 2, то новый массив будет из 5 элементов 3+1+1. Как мне решить эту задачку?

Добавлено через 37 минут
Вопрос решил таким способом
Код AS3:
       for (var h:int = 0; h < spliced.length; h++) {
				ballArr.splice(-1, 0, spliced[h]);
			}
			ballArr.splice( -1, 0, splicedAlone[0]);


Последний раз редактировалось pomuс; 28.03.2013 в 00:07.
Старый 28.03.2013, 07:48
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Что-то ничего не понял из вопроса. Но так, к теме, есть еще и другие методы
Код AS3:
var a:Array = [1, 2, 3, 4]; // 1,2,3,4
trace(a);
// сносим второй элемент и добавляем его в конец
a.push(a.splice(1, 1)); // 1,3,4,2
trace(a);

Старый 28.03.2013, 11:07
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 3  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
caseyryan а если обрезаешь не 1 элемент, а 3 например, то как добавить их в нужном порядке каждый элемент?

Старый 28.03.2013, 11:11
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 4  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
pomuс, иногда помогает проявлять самостоятельность и настойчивость в решениях задач.

Код AS3:
var a:Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // 1,2,3,4,5,6,7,8,9,10
trace(a);
// сносим три элемента начиная со второго и добавляем их в конец
a.push(a.splice(1, 3)); // 1,5,6,7,8,9,10,2,3,4
trace(a);
Я ведь правильно понял про нужный порядок добавления? Если нет, то можно так:
Код AS3:
var a:Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // 1,2,3,4,5,6,7,8,9,10
trace(a);
// сносим три элемента начиная со второго и добавляем их в конец в обратном порядке
a.push(a.splice(1, 3).reverse()); // 1,5,6,7,8,9,10,4,3,2
trace(a);
__________________
hauts.ru

Старый 28.03.2013, 11:15
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 5  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
Hauts
прошу прощения, меня запутал пример со справки, где сплайсом добавлялся отделенный массив с элементами.. и там элементы терялись поэтому приходилось изощоенным способом добавлять по одному

Добавлено через 20 минут
Да, вот она и тут эта проблема. array.length показывает меньшее количество чел в трейсе самих элементов. А надо чтобы было столько же

Добавлено через 1 час 41 минуту
Если кому то пригодится- я нашел метод создания отдельный массивов методом splice и потом методом concat объединял их

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Смысл в этом? Есть еще метод slice

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

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

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


 


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


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