我对 AS 还很陌生,正在玩我发现的扫雷游戏。对于游戏板上的每个单元格,我都有一个嵌入了数字动态文本框 (number_txt) 的影片剪辑 (cell_mc)、一个纯色方形影片剪辑 (block_mc) 和一个标记被炸框的小标志 (flag_mc )。我还有一个单独的动态文本框来计算板上还剩下多少地雷(minecounter_txt)。
我的问题是,当我尝试运行游戏时,如果我有一个“this.parent.flag_mc”或“this.parent”与任何提到的元素,Flash 会返回一个错误代码 - “1119:访问可能通过静态类型单元格的引用未定义的属性 flag_mc(或其他元素)。” 并且使用 minecounter_mc 它返回“1119:通过静态类型 flash.display:DisplayObjectContainer 的引用访问可能未定义的属性 flag_mc(或其他元素)”
我假设因为它说它不能引用静态类型的元素,所以它无法将它们识别为动态的。我搜索了一个解决方案,并读到它有助于在父级之前声明动态元素,即“MovieClip(this.parent.flag_mc),但它没有帮助。
任何人都可以帮忙吗?谢谢。
package {
import flash.display.MovieClip;
import flash.display.DisplayObjectContainer;
import flash.events.MouseEvent;
public class cell extends MovieClip {
public var state:Boolean;
public var revealed:Boolean;
public var xcor:uint;
public var ycor:uint;
public var marked:Boolean;
public var cellValue:int;
public function cell(corx:uint, cory:uint) {
// constructor code
this.state = false;
this.revealed = false;
this.marked = false;
this.cellValue = 0;
this.xcor = corx;
this.ycor = cory;
this.flag_mc.visible = false;
this.addEventListener(MouseEvent.CLICK, cellClicked);
}//end of constructor
private function cellClicked(event:MouseEvent):void{
if(event.shiftKey){
if(this.marked){
this.flag_mc.visible = false;
this.marked = false;
this.parent.minecounter_txt.text = String(int(this.parent.parent.minecounter_txt.text) + 1);
} else{
this.flag_mc.visible = true;
this.marked = true;
this.parent.minecounter_txt.text = String(int(this.parent.parent.minecounter_txt.text) - 1);
}
} else{
if(!state){
openCell();
} else{
if(!this.marked){
this.parent.play_btn.visible = true;
}
}
}
}
private function openCell(){
if(!this.marked && !this.revealed){
this.block_mc.visible = false;
this.revealed = true;
this.removeEventListener(MouseEvent.CLICK, cellClicked);
}
}
}//end of class
}//end of package