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

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

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

Регистрация: Feb 2006
Сообщений: 588
По умолчанию Сортировка динамического массива с дублированными мувиками

Код:
function SortMas() {
	for(dl = 0; dl <= BSKDel.length-1; dl++) {
		bx = typeof(BSKDel[dl]);
		if(bx != movieclip ) { 
// ЗДЕСЬ Я ПРИДУМАЮ КАК ПЕРЕСЧИТАТЬ МАССИВ, А ВОТ КАК ОТЛОВИТЬ ЭТОТ УДАЛЕННЫЙ МУВИК ИЛИ ОСТАВШЕЕСЯ МЕСТО ИЗ ПОД НЕГО???
}
		BSKDel[dl]._visible = true;
		BSKDel[dl]._x = 20;
		BSKDel[dl]._y = 10+dl*20;
		//trace(bx);
	}
	trace(BSKDel.length);
}
function MASDel() { // ФУНКЦИЯ ОТЛОВА НАЖАТИЯ НА МУВИК
	for(dl = 0; dl <= BSKDel.length; dl++) {
		BSKDel[dl].onRelease = function() { this.removeMovieClip(); BSKDel.splice(dl, 1); SortMas();}
	}
	
}
Ситуация такая - есть массив BSKDel с дублированными мувиками, которые выстраиваются в колонку. В функции MASDel - происходит отлов нажатия на какой либо мувик, который должен удалиться, а затем массив пересчитывается с учетом удаленного мувика, то есть пустой строчки, от удаленного мувика не должно остаться, остальные мувики, находящиеся под удаленным должны подняться на позицию вверх. Бьюс с этим уже не один час, но ни че в голову умного не приходит. В BSKDel.splice(dl, 1) использовал вместо переменной dl конструкцию this, но эффекта ноль. Проверял длину массива с учетом изменений, она остается прежней(!). Может все дело в позиции, с которой он должен удалить элемент, но как отловить эту позицию??? Просматривал массив через trace, выводит mc1, mc2,,,,mc6,mc7,mc8... После mc2 ссылки на мувики отсутствуют, но места под них отсаются(!!), что и подтверждает длина массива остается неизменной, даже после удаления всех мувиков... Мож кто знает, у меня мозг отказывается понимать эту ситуацию, использовал все что мог, даже проверку на тип элементов, сравнение с null, undefined, ' ', ""... Вроде все перепробовал,но а воз и ныне там...

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

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 2,736
Отправить сообщение для Король с помощью ICQ
перефразируя этот сумбурный текст, твой вопрос по сути - "как удалить из массива элемент"?
я правильно понял?

Старый 13.03.2006, 04:39
sem1313 вне форума Посмотреть профиль Отправить личное сообщение для sem1313 Найти все сообщения от sem1313
  № 3  
Ответить с цитированием
sem1313

Регистрация: Feb 2006
Сообщений: 588
Совершенно верно. Как удалить конкретный элемент из массива в данном случае?


Последний раз редактировалось sem1313; 13.03.2006 в 04:41.
Старый 13.03.2006, 05:29
Король вне форума Посмотреть профиль Отправить личное сообщение для Король Найти все сообщения от Король
  № 4  
Ответить с цитированием
Король
 
Аватар для Король

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 2,736
Отправить сообщение для Король с помощью ICQ
Код:
Array.prototype.deleteItem = function(t) {
	len = this.length;
	r = this.slice(0,t)
	g = this.slice((t+1),len)
      g.unshift(r)
	return g
};

Старый 13.03.2006, 05:30
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 5  
Ответить с цитированием
Antares
Banned
[+1 16.05.2006]
[++1 16.05.2006]
[+ 1 21.05.06]
[++ за хамство]
[+1 21.05.2006]
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Код:
myArray.splice(t, 1);

Старый 13.03.2006, 22:39
sem1313 вне форума Посмотреть профиль Отправить личное сообщение для sem1313 Найти все сообщения от sem1313
  № 6  
Ответить с цитированием
sem1313

Регистрация: Feb 2006
Сообщений: 588
2Король и Антарес, спасибо. Но это не срабатывает. Я знаю как удалить элемент из массива, но суть в том, что это можно сделать, если ты знаешь с какой позиции нужно удалить элемент. Array.splice(n, 1) - работает, когда n-определена, но в том то вся и загвоздка, что n в цикле for не может быть определена, выдает - undefnined.
Код:
for(dl = 0; dl <= BSKDel.length-1; dl++) {
             BSKDel[dl].onRelease = function() {
		as = String(this);
		trace(dl); // ВЫДАЕТ UNDEFINED
                          trace(as); // ВЫДАЕТ _level0.MovClip1_mc.Dubl1 - например
		trace(as.slice(-1,1)); //ВООБЩЕ НИЧЕГО НЕ ВЫДАЕТ
                          this.removeMovieClip(); 
		BSKCol[dl].removeMovieClip();
		BSKDel.sort();
		BSKDel.shift(); 
		}
	}
Траблу с удалением из массива определенного элемента, я все же решил, и она в листинге описана. Это пригодиться всем, кто столкнется с такой ситуёвиной. Кому интересно, объясню. Сначало ремувим клип. Из массива ссылка на клип удаляется, но место из под ссылки остается, т.е. длина массива остается прежней. Дальше делаем сортировку массива по типам. Первым элементом становится как раз тот бывший элемент, который мы ремувили, а точнее место из под него. Ну а дальше Array.shift() - удаляет первый элемент в массиве. Все прекрасно работает, но главной цели так и не добились. Как узнать порядковый номер элемента в массиве, на который кликнули??? Если бы не второй динамический массив с дублированными мувиками, то я бы успокоился, и не забивал бы голову. Но мне нужно определить позицию клипа, который ремувили, для того что бы удалить с этой же позиции элемент в другом массиве.
Я решил попробовать таким способом. Мувики дублируются, и к их идентификаторам в конце приписывается номер, который с каждым последующим дублированием увеличивается на единицу(_level0.MovClip1_mc.Dubl1 - например). Так вот мне нужно, всего то, узнать этот номер. Он и будет порядковым номером элемента в массиве.
Но и тут облом. as = this, и последующее приведение к типу String срабатывает, и прекрасно записывается в переменную. Задача упрощается до нельзя. Нужно выципить число, стоящее в конце строки. Тут должно работать as.slice(-1,1), но ни чего не происходит. Даже trace не выводит результат. Окошко появляется, но ни чего в нем нет(!)...

У меня следующий вопрос, как из ссылки(_level0.MovClip1_mc.Dubl1) получить значение цифры, стоящей в конце?
Мож кто знает другой вариант решения этой (думаю все уже поняли о чем речь) ситуации?

Старый 13.03.2006, 23:36
K.A.T.A.F.A.L.K.E.R вне форума Посмотреть профиль Отправить личное сообщение для K.A.T.A.F.A.L.K.E.R Найти все сообщения от K.A.T.A.F.A.L.K.E.R
  № 7  
Ответить с цитированием
K.A.T.A.F.A.L.K.E.R
 
Аватар для K.A.T.A.F.A.L.K.E.R

Регистрация: Jul 2005
Адрес: Go, Ukraine!
Сообщений: 787
Отправить сообщение для K.A.T.A.F.A.L.K.E.R с помощью ICQ
Кнут, том третий! Бугогагага А вообще ты уверен что тебе оно вообще надо? Хэширование рулит
__________________
...я люблю людей!..

Старый 13.03.2006, 23:55
KUZEN вне форума Посмотреть профиль Отправить личное сообщение для KUZEN Посетить домашнюю страницу KUZEN Найти все сообщения от KUZEN
  № 8  
Ответить с цитированием
KUZEN
Ветеран форума
 
Аватар для KUZEN

Регистрация: Jun 2005
Адрес: MOSCOW
Сообщений: 6,852
Отправить сообщение для KUZEN с помощью ICQ Отправить сообщение для KUZEN с помощью Yahoo Отправить сообщение для KUZEN с помощью Skype™
сделать из этого строку _level0.MovClip1_mc.Dubl1 узнать длинну (length) и выдрать последний символ , короче что то в этом роде

Код:
var str:String = "_level0.MovClip1_mc.Dubl1";
a = str.charAt(str.length-1);
trace(a);
__________________
BestMasterиZация

Старый 14.03.2006, 00:20
sem1313 вне форума Посмотреть профиль Отправить личное сообщение для sem1313 Найти все сообщения от sem1313
  № 9  
Ответить с цитированием
sem1313

Регистрация: Feb 2006
Сообщений: 588
Выдрать последний символ из обычной строки - легко. Задача, как эту строку сделать. Она делается(as = String(this), но толку то. С переменной as ничего нельзя сделать(выдрать символ).

Старый 14.03.2006, 00:30
K.A.T.A.F.A.L.K.E.R вне форума Посмотреть профиль Отправить личное сообщение для K.A.T.A.F.A.L.K.E.R Найти все сообщения от K.A.T.A.F.A.L.K.E.R
  № 10  
Ответить с цитированием
K.A.T.A.F.A.L.K.E.R
 
Аватар для K.A.T.A.F.A.L.K.E.R

Регистрация: Jul 2005
Адрес: Go, Ukraine!
Сообщений: 787
Отправить сообщение для K.A.T.A.F.A.L.K.E.R с помощью ICQ
this._name если очень хочется... Но ведь можно переменную и внутрь засунуть Только что толку? После удаления элемента позиции сместятся, поэтому советую не удалять элемент вообще, а просто очищать его.
__________________
...я люблю людей!..

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

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

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


 


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


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