1. 通过控制帧来控制mc, 现有mc且实例名为bg, 其中有关键帧分别命名为out和enter, 见图

我们在flex中加载该mc, 并通过代码控制mc的播放
var loader:SWFLoader = main.shadowLoader;
var mc:MovieClip = loader.content as MovieClip;
mc.bg.gotoAndPlay("out");
2. 通过actionscript代码控制mc与flex之间的通讯
现有一登录mc, 我们需要实现点击其登录按钮, 播放登录动画结束后返回用户名.
我们需要在动画结束桢派发事件, 然后在mc的主场景添加监听事件, 见图.

在20桢处添加派发事件代码
stop();
this.dispatchEvent(new Event('onLoginPlayOK'));
然后在mc主场景中, 添加监听事件, mc实例名为loginW.
loginW.addEventListener('onLoginPlayOK', onLoginPlayOK);
function onLoginPlayOK(e:Event):void{
// 派发监听事件
this.dispatchEvent(new Event('onLoginOK'));
//trace(loginW.getUsername());
}
我们看到在这里, 我们再次派发了一个名为onLoginOK的事件, 这需要我们到flex中进行监听并进行处理. 我们同时看到loginW.getUsername()这句话, 这是用于获取登录用户名, 关于getUsername()这个方法的定义我们见下图, 这是登录mc中的另外一个实例名为login_mc的mc元件, 在桢1处添加如下代码

很明显这里定义了两个方法getUsername和getPass用于主场景获取用户输入的用户名和密码, 这样便可以返回这两个参数了.
让我们看的再详细一点, 上图代码中的loginKj.username和loginKj.passwordT是啥玩意, 见图



上面的第一张图显然就是实例名为loginKj的mc, 输入框类型为输入文本, 名username, 然后这样我们就可以把用户名传送出来了.
OK, 现在回过头来, 看在flex中如何处理, 其实很简单, 在login这个mc加载完成后添加onLoginOK监听事件, 然后在这个事件处理方法中获取用户名,
代码如下
/**
* OK, login加载完毕
**/
protected function loginLoader_creationCompleteHandler(event:FlexEvent):void
{
var loader:SWFLoader = event.currentTarget as SWFLoader;
var mc:MovieClip = loader.content as MovieClip;
mc.addEventListener("onLoginOK", onLoginOK);
}
/**
* 登录完成, 返回用户名, 显示主界面, 同时派发相关事件
**/
protected function onLoginOK(event:Event):void
{
var mc:MovieClip = event.currentTarget as MovieClip;
//
// 界面事件
//
this.contentGrp.filters = null;
this.loginGrp.visible = false;
// 获取用户名
// mc.loginW.getUsername()
//Alert.show(mc.loginW.getUsername());
//
// @todo 获取用户后派发相关事件
//
}
其实总结来说, 问题的关键是事件的派发与监听联系了flex与swf, 在flash中把动画转换为一个movieclip, 并且对其命名, 然后在需要通讯的地方派发事件, 传递参数, 然后在flex中监听该事件, 进行处理, 反之亦然. 对于mc中的子元件参数处理等都可以直接放到这个mc的主场景中进行处理.





