Flash整站项目Gaia框架总结(2)AS2部分

今天的项目又用到了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节点之后。

Flash整站项目Gaia框架总结(2)AS2部分_第1张图片

    <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

如何给动态类动态添加属性和方法【Flash AS3.0】

你可能感兴趣的:(框架,xml,function,测试,Flash,branch)