2012-01-11 75 views
0

我试图向舞台添加同一个按钮的多个不同版本,并且能够稍后通过为其分配ID来访问它们。我认为这样做的方法是为按钮定义一个内部静态变量的类,以便可以在下一个函数中找到该ID。这似乎没有工作,因为ID是不断显示为最后给出的数字,所以在这种情况下6.AS3动态添加按钮到舞台并访问不同的功能

我认为我做错了这个?这里是我的代码,这样就可以更好地理解:

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类:

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.

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

FYI所需按键的总数为241

回答

2

因为ID是一个静态变量,这意味着只有一个namez的所有实例ID,而这听起来像你想为每个实例的ID。只需删除“静态”属性,如下定义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); 
} 
+0

使用这个会给我这个错误:“TypeError:Error#1009:Can not access a property or method of null object reference。 \t at src :: main/checkMe()” – 2012-01-11 20:59:01

+0

'namez'当时的事件。尝试添加:this.mouseChildren = false;进入namez类的构造函数。 – 2012-01-18 20:01:55

1

我认为问题在于这样一个事实:namez ID是静态的。所以你不会将Id值分配给特定的实例,而是分配给namez类。

把这些变量作为公共财产

public var Id:int; 

除此之外,在你的事件监听功能checkMe,你又引用类namez,而不是实例。更改功能分为:

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

使用此给出了错误:“main.as ,第105行\t 1119:通过带有静态类型Class的引用访问可能未定义的属性ID“。 – 2012-01-11 20:27:58