AS3动态添加按钮到舞台和访问不同的功能

时间:2012-01-11 15:23:39

标签: flash actionscript-3 actionscript

我正在尝试将相同按钮的多个不同版本添加到舞台,并且稍后可以通过为其分配ID来访问它们。我假设这样做的方法是为按钮设置一个类,其中定义了一个内部静态变量,以便可以在下一个函数中找到该ID。这似乎不起作用,因为ID始终显示为给出的最后一个数字,因此在这种情况下为6。

我认为我这样做错了?这是我的代码,以便您更好地理解:

package src  {

import flash.display.MovieClip;
import flash.events.*;
import flash.utils.Timer;
import flash.net.*
import flash.display.Loader

public class main extends MovieClip {

public var xmlData:XML = new XML
public var currentName = null

    public function main() {
        var y = 0
        for(x=0; x<=6; x++){
            var names:namez = new namez
            namez.ID = y
            y++
            names.y = x*25
            names.addEventListener(MouseEvent.CLICK, checkMe)
            spinner.addChild(names)
        }
    }

    public function checkMe(e:MouseEvent){
        trace("clicked"+namez.ID)
    }
}
}

namez.as class:

package src {

import flash.display.MovieClip

public class namez extends MovieClip{

    internal static var ID

    public function namez() {
    }

}

}

尽管对namez.ID的按钮进行了跟踪,并且在单击按钮时正确显示0,1,2,3,4,5,6,但显示的唯一数字是6。

如何正确地进行其他功能可以访问的动态添加按钮?我应该在这里使用数组吗?

仅供参考,所需按钮总数为241。

2 个答案:

答案 0 :(得分:2)

因为ID是一个静态变量,这意味着namez的所有实例只有一个ID,而听起来你想要为每个实例提供一个ID。只需删除'static'属性并按如下方式定义ID:

internal var ID

Pbirkoff很好地了解了您如何访问.ID属性,但您可能还希望将事件目标强制转换为namez类以访问更多自定义属性。

我还注意到你遗漏了一些分号和类型定义,这些定义可能需要也可能不需要,但它们是很好的编程实践:

public function main():void {
    var y:int = 0
    for (x:int = 0; x<=6; x++) {
        var names:namez = new namez();
        namez.ID = y;
        y++;
        names.y = x*25;
        names.addEventListener(MouseEvent.CLICK, checkMe);
        spinner.addChild(names);
    }
}

private function checkMe(e:MouseEvent):void {
    var names:namez = e.target as namez;
    trace("clicked" + names.ID);
}

答案 1 :(得分:1)

我认为问题在于namez上的ID是静态的。因此,您不是将Id值分配给特定实例,而是分配给namez-class。

使变量成为公共属性

public var Id:int;

除此之外,在EventListener函数checkMe中,您再次引用类namez,而不是实例。将功能更改为:

public function checkMe(e:MouseEvent)
{
    trace('clicked: ' + e.target.Id);
}