峰之博纹 - Pelephone个人博客

actioscript 3.0 调用容器方法,用转换类型

actioscript 3.0 调用上容器的方法。是一个很有用的操作,不过实现起还有些小决窍,最近的开发中我就碰到了这个问题,最后用了些偏门的东东解决了。在写方法之前,首先谢谢闪闪威廉的帮助,全靠他的指导才得以解决。

首先先贴出错误的代码:
testParen.as代码 这个是文档类代码。


package {
import flash.display.Sprite;

public class testParent extends Sprite
{
public function testParent()
{
var s:sub = new sub();
this.addChild(s);
}
public function callBack():void{
trace("我是父级容器");
}
}
}



sub.as这是子级容器代码,就是上面addChild(s)的那个。


package
{
import flash.display.Sprite;
import flash.events.MouseEvent;

public class sub extends Sprite
{
public function sub()
{
super();
this.graphics.beginFill(0x000000,1);
this.graphics.drawRect(0,0,100,100);
this.graphics.endFill();
this.addEventListener(MouseEvent.CLICK,cl);
}
private function cl(e:MouseEvent):void{
this.parent.callBack(); // 问题出在这里,如此访问上级容器出错
}
}
}



错误描述
1061: 调用可能未定义的方法 callBack (通过 static 类型 flash.display:DisplayObjectContainer 引用)。


解决方法很容易,转换一下类型就可以解决了。把sub处的this.parent.callBack();  改为(this.parent as testParent).callBack(); 问题就解决了。
sub修改后的代码如下:


package
{
import flash.display.Sprite;
import flash.events.MouseEvent;

public class sub extends Sprite
{
public function sub()
{
super();
this.graphics.beginFill(0x000000,1);
this.graphics.drawRect(0,0,100,100);
this.graphics.endFill();
this.addEventListener(MouseEvent.CLICK,cl);
}
private function cl(e:MouseEvent):void{
(this.parent as testParent).callBack(); // 修改此处,转换类型
}
}
}



调试,点击黑色的方块就会得出输入代码了。
output:我是父级容器

写成(this.parent as testParent).callBack();有点不好懂,我们换个写法。写成
var temp:testParent=new this.parent as testParent;
temp.callBack();
这样写是不是好看得多了呢?


上面是本人实际应用中碰到的问题,是子级调用父级容器里面的方法。
平时我们写as的时候大多是直接调用容器里的方法。
下面的代码直接调用子级方法,其实实质是一样的。
testParen.as代码 这个是文档类代码。


package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import sub;

public class testParent extends Sprite
{
private var s:sub;
public function testParent()
{
s = new sub();
s.graphics.beginFill(0x000000,1);
s.graphics.drawRect(0,0,100,100);
s.graphics.endFill();
s.addEventListener(MouseEvent.CLICK,cl);
this.addChild(s);
}
private function cl():void{
var temp:sub=new this.parent as sub;
temp.callBack();
}
}
}



sub.as代码


package
{
import flash.display.Sprite;

public class sub extends Sprite
{
public function sub()
{

}
public function cl(e:MouseEvent):void{
trace("输出");
}
}
}
posted @ 2008-11-09 22:44  Pelephone  阅读(613)  评论(0编辑  收藏  举报