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

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

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

Регистрация: Feb 2008
Сообщений: 39
По умолчанию Массив переменных

Добрый день, я бы хотел разобраться с такой задачей, как создание массива элементами которого будут переменные и как работать с такими переменными?

Я хочу создать n количество клипов на сцене которые имена объектов которых находились бы в массиве и я мог к ним обращаться через массив.

К сожалению моя проба потерпела фиаско:
Код AS3:
var n:Number = 10
var items:Array = new Array(n);
 
for ( var i:Number = 0; i < n; i++ )
 
{ 
 
items[i] = "item" + i;
 
var items[i]:Mc = new Mc;
 
addChild(items[i]);
item[i].x = item[i].width*(i) + item[i].width/2; 
item[i].y = item[i].height/2;
 
}
trace(items);


Последний раз редактировалось iNils; 21.10.2012 в 15:06.
Старый 21.10.2012, 13:47
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Код AS3:
var n:int = 10; // так как индекс массива - это целое число, то и указываем тип целого, лучше даже uint прописать, для неотрицательных чисел
var items:Array = []; // в ас3 динамические массивы, размерность задавать не нужно
for (var i:int = 0; i < n; i++) { 
       items[i] = new Mc(); // создаем на каждом новом индексе, новый мувиклип
       items[i].x = items[i].width * i + items[i].width /2; // расставляем как надо
       items[i].y = items[i].height / 2;
       addChild(items[i]); // добавляем в текущий контейнер только что созданный мувиклип
}
 
trace(items[2], "это третий элемент массива");

Старый 21.10.2012, 13:50
Wazzabi вне форума Посмотреть профиль Отправить личное сообщение для Wazzabi Найти все сообщения от Wazzabi
  № 3  
Ответить с цитированием
Wazzabi

Регистрация: Apr 2012
Сообщений: 70
Вы объявляете массив items, а обращаетесь к массиву item!
упс опередили =)

Старый 21.10.2012, 15:38
Shaak вне форума Посмотреть профиль Отправить личное сообщение для Shaak Найти все сообщения от Shaak
  № 4  
Ответить с цитированием
Shaak

Регистрация: Feb 2008
Сообщений: 39
Спасибо большое!
Теперь возникла другая проблема.
Я создал матрицу объектов на сцене (10 на 10) путем создания вложенных массивов Array[i][j][0] в котором последний массив содержит объект (0 - первый элемент) и номер его создания (1 - 2 элемент).
Но я не могу понять, как мне отследить действия мыши над определенным элементом массива (объектом) и удалить именно его.
Я добавил слушатель событий в каждый объект, но как отследить над каким именно произошло действие я не могу(

Код AS3:
//создаю массив объектов
var n:int = 10 // создаем длину массива (необязательно)
var items:Array = new Array(n-1); //массив вещей
var c:int = 0 
 
for ( var i:int = 0; i <= n-1; i++ )
{ 
	items[i] = new Array(n-1)
	for ( var j:int = 0; j <= n-1; j++ )
		{
			var item:Mc = new Mc;
			c = c+1
			addChild(item);
			item.x = item.width*i + item.width/2 ; 
			item.y = item.height*j + item.height/2;
			items[i][j]=new Array(item, c);
		}
	}
trace(items[1][1][1]);
trace(items.length);
trace(items[1].length);
 
// создание слушателя событий
for ( i = 0; i < items.length; i++ )
{
	for ( j = 0; j < items[i].length; j++ )
	{				
		items[i][j][0].addEventListener(MouseEvent.CLICK, SelectGex);
		items[i][j][0].addEventListener(MouseEvent.MOUSE_OVER, SelectGex);				
	}			
}
// функция активизирующаяся при наведении или клике объекта
function SelectGex(e:MouseEvent):void 
{
	trace ("Нажато или наведено на Гекс");
	//trace(items[i][j][1]);
	trace(e);	
 
}
П.С. я понимаю, что можно былобы использовать координаты объекта и координаты нахождения мыши в момент события, однако что делать, если объект не квадатный, мне хотелось бы отследить именно сам объект, а не высчитать его нахождение. Спасибо всем, кто попытается помочь!

Старый 21.10.2012, 16:01
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 5  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
Код AS3:
function SelectGex(e:MouseEvent):void 
{  
         var geks:Mc = e.target as Mc;
	if(geks.parent){
                   geks.parent.removeChild(geks);
 
             }
 
}

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Просто добавлю, Shaak в Вашем случае, вот так:
Код AS3:
for ( var i:int = 0; i <= n-1; i++ )
писать не нужно. Это просто лишняя заморочка. Вот это идентичное условие, но несколько проще:
Код AS3:
for ( var i:int = 0; i < n; i++ )

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

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

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


 


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


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