今天的项目又用到了Gaia,只不过这次用AS2.不是AS3.
去年上一次的见此。
《Flash之gaia专栏——又见Gaia 项目中用到的方法汇总》。
1 基础的基础
1 goto的值是XML的id.
2 不用复制以前的FD模板,Gaia会自动生成,用了反而混淆
3 不要用自定义的滚动条,会出现>>INTERRUPTIN<<的经典错误. 为什么呢?我推测是这样的:
1) 自定义滚动条在根上创建了空mc,作为onEnterFrame的载体
2) 这个mc和tweenMax类在根上创建的空mc相冲突,可能是覆盖.
3) 导致单独页面的onTransitionOut函数无法执行,无法调用完成事件.
2 拦截页面
比如活动页面要按步骤,1-2-3,不能直接跳到3,就要在拦截事件中判断。判断的方法可能很多,我想的很简单,就是判断上一个branch是不是,比如3之前是不是2,2之前是不是1.
if (Now = step2) { if (old=step1) { 跳到2(); }else { 退回1(); } } if (Now = step3) { if (old=step2) { 跳到3(); }else { 退回1(); } }
应该用哪个拦截事件呢?试了下,感觉onBeforeTransitionOut和onBeforeTransitionIn区别不大。
关键代码如下:
var myListener:Function = Delegate.create(this,onBeforeTransitionOut); //加拦截事件 releaseGaia = Gaia.api.beforeTransitionOut(myListener,true); //回调事件 function onBeforeTransitionOut(event:GaiaEvent) { var Nowbranch = event.validBranch; trace("Nowbranch/////"+Nowbranch); if (Nowbranch == "index/nav/action/step2") {//目标分支 if ( LASTbranch == "index/nav/action/step1" && 1==Main.step[1]) {//判断旧分支是不是上一个 LASTbranch = event.validBranch; //记录分支 releaseGaia();//跳到Step2 }else { LASTbranch = "index/nav/action";//记录分支 Gaia.api.goto("index/nav/action");//退回Step1 } return; } LASTbranch = event.validBranch; //记录分支 releaseGaia();//该去哪去哪 }
2 拦截之二
上一次是把bg.swf作为assets放到index,控制代码在。在FDT搜索assets['bg'],找到。
要等到加载完成后,再播放。
报错
branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 branch-----------------------index/nav/action/step1 在一个动作列表中,递归超过了 256 级。 这可能是一个无限循环。 已禁止在此影片中继续执行动作。
3 asset
asset可以加载swf也可以是xml。
像动画师做的东西就可以单独拿出来作为asset,这样,动画模块就和代码分离了。
<page id="index" title="Single Page Gaia" src="index.swf" depth="middle" SEO="true"> <asset id="MyPreloader" src="MyPreloader.swf" /> <asset id="bg" src="swf/assets/bg.swf" />
4 测试和发布
在Page类文件加代码,文件既能单独打开看,又能在整体的时候,使用框架统一的淡入淡出。
//在构造器中 if (this._parent != undefined) { _alpha = 0; }else { my_init(); } //在transitionIn中 if (this._parent != undefined) { my_init(); }
5 缓动很长的背景图片
bg是一张很长的背景图片,类似横幅长卷《清明上河图》,连接6个场景。
每当要切换场景的时候,要先判断子影片是否加载完成,加载完成,让bg缓动到相应的x位置。
gaia里注册的拦截事件是afterTransitionOut:
releaseGaia = Gaia.api.afterTransitionOut(onAfterTransitionOut,true);
在onAfterTransitionOut事件中,通过判断分支,如果是指定的场景,就让bg缓动到相应的x位置。并在onComplete完成事件中,使子影片淡入。
function onAfterTransitionOut(event:GaiaEvent):void { var branch:String = Gaia.api.getCurrentBranch(); if(是指定的场景){ TweenLite.to(bg,1,{ x: -_posArr[id - 1],ease:Circ.easeInOut,onComplete:function():void { releaseGaia(); } } ); } }
上次经验不足,绕了个大圈子。
1)先用Flash导出BgImg.SWC
2)再写个BgAsset类实例化BgImg
3)再用BgAsset导出bg.swf.
4)最后这个swf作为assets放到indexPage下
5)最可恶的是控制bg的代码没有写在indexPage里面,而是写在mainContext.as。在FDT找了半天才找到线索。
var bg:IMovieClip = IMovieClip(Gaia.api.getPage("index").assets.bg);
要等到加载完成后,再播放。
onAfterTransitionOut事件中做缓动。
6 指定首页的加载条
在site.xml的site节点加上属性 preloader="MyPreloader.swf"
并在index page节点加上 <asset id="MyPreloader" src="MyPreloader.swf"/>
以前的做法是
1)Flash把素材导出成LoadingBar.SWC.
2)把Gaia默认的Preloader.as复制成MyPreloader.as.
3)用FDT写MyPreloader.as,在transitionIn中实例化SWC的LoadingBar类,加到舞台,淡入缓动。
4)在onProgress中操作进度条和文本框。
5)上一次首页还有个进入按钮,Gaia是直接进入内页。此时,内页内容已经在舞台上,只能让他们不显示,如果是动画
,就停在第一帧。点按钮后,再让其显示,并播放动画。
if(event.perc==1){ //加载完成 btn.onRelease=function(){ 发送事件,显示内页。 } }
7 指定接口路径
项目中像链接,后台路径都是不固定的,基本上不到最后一天,AE是给不到上线地址了。所以要给自己留条活路,不要在Flash里写死,要留出接口。我一般就在Gaia的site.xml里加自已的节点,就加在page节点之后。
<my nocache="no" alertJS="yes" > <BTsend_for_gift href="http://localhost/h/app/send_for_gift.aspx" nocache="yes" />
8 跳转博客平台
用下面的测试,xxx,yyy换成想要的内容
<a href="http://v.t.sina.com.cn/share/share.PHP?url=yyy&title=xxx" window="_blank">新浪</a> <br /> <a href="http://www.kaixin001.com/repaste/share.PHP?rurl=yyy&rcontent=yyy&rtitle=xxx" window="_blank" >开心</a> <br /> <a href="http://share.renren.com/share/buttonshare.do?link=yyy&title=xxx" window="_blank">人人网</a> <br /> <a href="http://www.douban.com/recommend/?url=yyy&title=xxx" window="_blank" >豆瓣</a>参考 js 几个网站的分享链接
http://blog.csdn.net/ypb137154098/article/details/6590515
9 访问Assets
在AS3中访问assets要加个判断,以免以后在xml删asset节点,flash报错。
if(this.assets.hasOwnProperty("AsearchBar")){ this.assets["AsearchBar"].visible = true; }AS2就不用这一步了。
参考
http://www.sqflash.com/Flashwenti/aswenti/2010-07-25/150.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。