![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Товарищи, есть класс, который создает кучу кнопок, каждая кнопка должна добавлять собственную картинку..
НО! у меня проблема - всем кнопкам назначается действие последней созданной кнопки, т.е. дайствия "затираются". Вот код, подскажите, как эту проблему устранить. Заранее всем оргомное спасибо! 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);
});
}
}
}
}
|
|
|||||
|
что происходит: у всех кнопок в обработчике клика одна и та же переменная 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);
}
}
|
|
|||||
|
так делать очень-очень не хорошо
__________________
я могу стать всем, если только захочу |
|
|||||
|
привет! в твой код (программное создание кнопок) я подставил это:
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);
}
}
Цитата:
Заранее спасибо! Последний раз редактировалось elniko; 21.10.2008 в 00:28. |
|
|||||
|
в таком раскладе target это Loader, надо смотреть currentTarget
|
|
|||||
|
ОГРОМНОЕ спасибо за помощь!!!
|
![]() |
![]() |
Часовой пояс GMT +4, время: 16:36. |
|
|
« Предыдущая тема | Следующая тема » |
|
|