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

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

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

Регистрация: Oct 2008
Адрес: MSC
Сообщений: 27
Отправить сообщение для elniko с помощью ICQ
The bomb! Создание кнопок с уникальными действиями. Как?

Товарищи, есть класс, который создает кучу кнопок, каждая кнопка должна добавлять собственную картинку..

НО! у меня проблема - всем кнопкам назначается действие последней созданной кнопки, т.е. дайствия "затираются".

Вот код, подскажите, как эту проблему устранить. Заранее всем оргомное спасибо!

Код:
package {
	
import flash.net.FileReference;
import flash.display.*;
import flash.text.*;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.events.MouseEvent;

	public class elGetClipArt {

		public var artArr:Array = new Array();
		public var clpArr:Array = new Array();
		
		public function elGetClipArt(target:MovieClip, cl_cnt:Number, avatar_mc:MovieClip, glFlag:Object){
			
            var clpArr:Array = new Array();
			
		    for(i=1;i<=cl_cnt;i+=1){
				
				var uid:Number = Math.random();
				var clipImg:String = "clip/"+i+".png";
			    clpArr[i]   = new Sprite();
				clpArr[i].x = 45*(i-1)+5;
				clpArr[i].y = 5;
				var cl_ldr:Loader = new Loader();
				var cl_url:String = clipImg;
				var cl_urlReq:URLRequest = new URLRequest(cl_url);
				cl_ldr.load(cl_urlReq);

				target.addChild(clpArr[i]);
				clpArr[i].addChild(cl_ldr);

				clpArr[i].addEventListener(MouseEvent.MOUSE_UP,function(event:MouseEvent){
						trace(i);
						trace(clipImg);
						artArr[i] = new elClipArt(avatar_mc, glFlag, i);
						artArr[i].MakeClipArt(clipImg);
				});
			
			}
			
		}

	}
	
}

Старый 20.10.2008, 22:43
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
что происходит: у всех кнопок в обработчике клика одна и та же переменная i (итератор цикла), со всеми вытекающими отсюда последствиями..
как бы сделал:
clpArr[i] должен быть не Sprite'ом, а его наследником, имеющим свойство id , которое при создании в цикле и определим, а в обработчике клика его стало быть увидим
за вычетом несущественного:
Код:
package {
	import flash.display.*;
	import flash.events.*;

	public class elGetClipArt extends Sprite{
		public var clpArr:Array = [];
		
		public function elGetClipArt(){
		   for (var i:int = 0; i < 3; i++){
			   var clip:MySprite = new MySprite(i);
			   clip.x = 45 * i;
			   addChild(clip);
			   clip.addEventListener(MouseEvent.MOUSE_UP, clipClickHandler);
			   clpArr.push(clip);
			}
		}
		private function clipClickHandler(event:MouseEvent):void {
			var clip:MySprite = event.target as MySprite;
			var id:int = clip.id;
			trace( "id : " + id );

		}
	}
}

import flash.display.*;
class MySprite extends Sprite{
	public var id:int;
	public function MySprite(id:int) {
		this.id = id;
		//debug
		graphics.lineStyle(50);
		graphics.lineTo(1, 1);
	}
}

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

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
Код:
clpArr[i].addEventListener(MouseEvent.MOUSE_UP,function(event:MouseEvent){
	trace(i);
	trace(clipImg);
	artArr[i] = new elClipArt(avatar_mc, glFlag, i);
	artArr[i].MakeClipArt(clipImg);
	});
так делать очень-очень не хорошо
__________________
я могу стать всем, если только захочу

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

Регистрация: Oct 2008
Адрес: MSC
Сообщений: 27
Отправить сообщение для elniko с помощью ICQ
привет! в твой код (программное создание кнопок) я подставил это:
Код:
	import flash.display.*;
	import flash.net.URLRequest;
	import flash.net.URLVariables;
	
	class MySprite extends Sprite{
		
		public var id:int;
		public function MySprite(id:int) {
			this.id = id;
			//debug
			//graphics.lineStyle(50);
			//graphics.lineTo(1, 1);
				var cl_ldr:Loader = new Loader();
				var cl_url:String = "clip/"+id+".png";
				var cl_urlReq:URLRequest = new URLRequest(cl_url);
				cl_ldr.load(cl_urlReq);
				addChild(cl_ldr);
		
		}
	}
теперь компилятор ругается:

Цитата:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at elGetClipArt/clipClickHandler()
подскажи плиз, что не так я делаю? просто с флешем работаю 2-й день, ещё не понял всех примудростей )

Заранее спасибо!


Последний раз редактировалось elniko; 21.10.2008 в 00:28.
Старый 21.10.2008, 00:53
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
в таком раскладе target это Loader, надо смотреть currentTarget
Код:
private function clipClickHandler(event:MouseEvent):void {
	var clip:MySprite = event.currentTarget as MySprite;
	if (clip) {
		var id:int = clip.id;
		trace( "id : " + id );
	}
}

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

Регистрация: Oct 2008
Адрес: MSC
Сообщений: 27
Отправить сообщение для elniko с помощью ICQ
ОГРОМНОЕ спасибо за помощь!!!

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

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

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


 


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


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