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("输出"); } }}转载于:https://www.cnblogs.com/pelephone/archive/2008/11/09/test-parent-as3-sprite.html
相关资源:连接二值图像中断开的点