1

我正在创建一个具有搜索功能的应用程序。我通过从数组中加载与搜索条件匹配的图像来显示图像。所有图像都是从库中加载的。我希望能够像单击按钮一样单击图像。单击后,我想转到第 3 帧并更改一个变量整数以说明单击了哪个图像,以便我可以在第 3 帧中显示有关照片的信息。我可以使用事件侦听器执行此操作吗?

imagesArray[i].addEventListener(MouseEvent.CLICK, imageClick);
function imageClick(event:MouseEvent):void
{
    gotoAndStop(3);
    current = i;
}

或类似的,谢谢

4

2 回答 2

0

是的,但不会那么容易。首先,Bitmap 不处理事件,因此您不能将侦听器直接分配给 Bitmap 对象。接下来,在这样的构造中没有可用的“i”,您必须自己确定“i”。为此,您需要解析event.target属性,即被点击的对象。您将每个对象包装Bitmap成一个单独的Sprite对象,将侦听器分配给这些精灵,然后解析event.target以从中获取相关的对象引用,通过indexOf()调用获取索引,并将其分配给全局current变量。

for (i=0;i<imageArray.length;i++) {
    var sp:Sprite=new Sprite();
    sp.addChild(imageArray[i]);
    // position "sp" correctly here
    addChild(sp);
    sp.addEventListener(MouseEvent.CLICK, imageClick);
}
function imageClick(e:Event):void {
    var content=e.target.getChildAt(0); // the object that was wrapped
    var i:int=imageArray.indexOf(content);
    if (i==-1) return; // OW, out of array
    current=i;
    gotoAndStop(3);
}
于 2013-08-13T10:03:31.753 回答
0

我不太确定将“current”设置为“i”是否会起作用,因为该函数不会与 for 循环同时运行。

我假设因为您使用的是 [i] ,所以您在 for 循环中添加了事件侦听器?

你可以做的是:

for (var i:int = 0; i < (howeverManyTimesToRun); i++)
{
    imagesArray[i].addEventListener(MouseEvent.CLICK, imageClick);
    imagesArray[i].myIndex = i;
}

然后在你的函数中(在 for 循环之外)

function imageClick (e:MouseEvent) {
    gotoAndStop(3);
    current = e.currentTarget.myIndex;
}

同样在您的 for 循环中,您可能想要添加

imagesArray[i].buttonMode = true;

当他们的鼠标经过您的图像时,将鼠标光标更改为手形。

于 2013-08-13T10:08:00.573 回答