
FLASH AS3 外部调用SWF 问题
我想用爷爷外部调用调用爸爸,爸爸还有个儿子,也就是一个按钮然后点击儿子按钮,告诉爷爷把爸爸remove掉这个怎么能实现呢...
我想用爷爷外部调用调用爸爸, 爸爸还有个儿子,也就是一个按钮
然后点击儿子按钮, 告诉爷爷 把爸爸 remove掉
这个怎么能实现呢 展开
然后点击儿子按钮, 告诉爷爷 把爸爸 remove掉
这个怎么能实现呢 展开
3个回答
展开全部
这个应该是爷爷,儿子孙子的问题吧,那请问你,点击孙子删除儿子,那孙子呢,留不留?
还有一个问题,就是你是想在爷爷中控制孙子删除儿子,是这样吧,我有个办法可以解决你这个问题,还是域的问题,这个需要在你制作动画的时候,设计好,就是在儿子的影片中,设计好儿子(影片)及孙子(按钮),然后在库中属性设置好类链接,并为其分别起一个类名,这样即使你外部的影片舞台是空的内容,那么你也可以通过域来实现对儿子及孙子的控制。这样就可以象使用爷爷家的东西一样来轻易的实现控制了。
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.display.DisplayObject;
var loadClassMc:Class;
var loadClassBtn:Class;
var url:String = "儿子.swf";
var req:URLRequest = new URLRequest(url);
var loader:Loader=new Loader();
//假设你的元件是个影片剪辑
var swfMc:MovieClip;
//假设你的按钮是一个SimpleButton;
var swfBtn:SimpleButton;
//创建一个容器用以承载外部的按钮及影片
var swfSprite:Sprite=new Sprite();
loader.load(req);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderHand);
function onLoaderHand(evt:Event):void
{
//让我们先来检查一下外部swf中是不是有我们要获取的类定义,以便我们调用。
if (evt.target.applicationDomain.hasDefinition("儿子"))
{
loadClassMc = evt.target.applicationDomain.getDefinition("儿子") as Class;
//重新实例化,在爷爷处重新调用
swfMc=new loadClassMc();
}
if (evt.target.applicationDomain.hasDefinition("孙子"))
{
loadClassBtn = evt.target.applicationDomain.getDefinition("孙子") as Class;
//重新实例化,在爷爷处重新调用
swfBtn=new loadClassBtn();
}
if (swfBtn!=null&&swfMc!=null)
{
swfSprite.addChild(swfMc);
swfSprite.addChild(swfBtn);
//以下设置坐标的脚本,在此略去;
addChild(swfSprite);
//添加鼠标事件,用以删除儿子,就是整体删除外部加载的影片,包括按钮
swfBtn.addEventListener(MouseEvent.CLICK,onRemove);
}
}
function onRemove(evt:MouseEvent):void
{
//在此只要将显示对象从显示列表中清除就可以了。
removeChild(DisplayObject(swfSprite));
}
还有一个问题,就是你是想在爷爷中控制孙子删除儿子,是这样吧,我有个办法可以解决你这个问题,还是域的问题,这个需要在你制作动画的时候,设计好,就是在儿子的影片中,设计好儿子(影片)及孙子(按钮),然后在库中属性设置好类链接,并为其分别起一个类名,这样即使你外部的影片舞台是空的内容,那么你也可以通过域来实现对儿子及孙子的控制。这样就可以象使用爷爷家的东西一样来轻易的实现控制了。
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.display.DisplayObject;
var loadClassMc:Class;
var loadClassBtn:Class;
var url:String = "儿子.swf";
var req:URLRequest = new URLRequest(url);
var loader:Loader=new Loader();
//假设你的元件是个影片剪辑
var swfMc:MovieClip;
//假设你的按钮是一个SimpleButton;
var swfBtn:SimpleButton;
//创建一个容器用以承载外部的按钮及影片
var swfSprite:Sprite=new Sprite();
loader.load(req);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderHand);
function onLoaderHand(evt:Event):void
{
//让我们先来检查一下外部swf中是不是有我们要获取的类定义,以便我们调用。
if (evt.target.applicationDomain.hasDefinition("儿子"))
{
loadClassMc = evt.target.applicationDomain.getDefinition("儿子") as Class;
//重新实例化,在爷爷处重新调用
swfMc=new loadClassMc();
}
if (evt.target.applicationDomain.hasDefinition("孙子"))
{
loadClassBtn = evt.target.applicationDomain.getDefinition("孙子") as Class;
//重新实例化,在爷爷处重新调用
swfBtn=new loadClassBtn();
}
if (swfBtn!=null&&swfMc!=null)
{
swfSprite.addChild(swfMc);
swfSprite.addChild(swfBtn);
//以下设置坐标的脚本,在此略去;
addChild(swfSprite);
//添加鼠标事件,用以删除儿子,就是整体删除外部加载的影片,包括按钮
swfBtn.addEventListener(MouseEvent.CLICK,onRemove);
}
}
function onRemove(evt:MouseEvent):void
{
//在此只要将显示对象从显示列表中清除就可以了。
removeChild(DisplayObject(swfSprite));
}
展开全部
那用事件做吧,首先爷爷加一个监听,然后儿子点击的时候抛出这个事件 爷爷监听到这个事件 就删除爸爸
爷爷里的代码:
addEventListener("MyEvent",MyEvent);
function MyEvent(e:Event)
{
removeEventListener("MyEvent",MyEvent);
removeChild(爸爸);
}
然后在儿子点击函数里 写:
dispatchEvent(new Event("MyEvent",true));//抛出MyEvent 这个事件 爷爷就会知道了 然后删除爸爸
爷爷里的代码:
addEventListener("MyEvent",MyEvent);
function MyEvent(e:Event)
{
removeEventListener("MyEvent",MyEvent);
removeChild(爸爸);
}
然后在儿子点击函数里 写:
dispatchEvent(new Event("MyEvent",true));//抛出MyEvent 这个事件 爷爷就会知道了 然后删除爸爸
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个用到单例模式可以解决, 爷爷和爸爸都具有唯一的名称 是全局的 可以互相调用,也就是说点击爸爸里面的“儿子” 爷爷(名称)remove他加载进来的爸爸 搜下单例模式吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询