从影片剪辑派生的类以及Transition类的应用
目前大概想做的是这样的一个东西。
建立一个基于MovieClip的base层,载入背景图片,根据情况往上添加立绘或者其他的图片。
在图片全部载入完成之后trans出来。
使用Loader加载图片的实验基本是OK的:
(1)每个图层用了一个单独的Loader。
(2)注意在加载完成之前是不能显示滴。
(3)基本做法是每个Loader加载成功的监听函数里,将对应的变数设成true,一直到全部加载完成以后再调用addChild依次添加图层。
(4)执行Transition之前base层的visible设为0的话,Transition之后也会自动显示出来。如果之前visible就设为1的话,屏幕会有闪一下的现象发生(也就是addChild先执行了立即显示,然后再进行Transition)。
又,突然发现as3的函数是可以嵌套定义的,也就是说监听读取完成的函数可以写到读取函数的内部。不知道这样可不可以更简单地达成如(3)的效果。
接下来要解决的问题:
这样执行的话,如果要多次换图片就是马上换,换完再trans,很可能造成屏幕各种闪的状况。
那咋么样实现类似krkr的表、里页切换方式?
也就是里页改变图片->完成后再进行表里交换。只用一个影片剪辑做得到咩……
预备参考:http://code.google.com/p/ghostcat/
里面有个切换效果相关的代码……http://bbs.9ria.com/viewthread.php?tid=38570&extra=&page=1
PS:
按理说Loader就应该能起到代替里页的作用了,
可是实际上在addChild(Loader.content)以后,改变Loader.content的内容又会发生什么呢……=_=
因为addChild(loader.content)后不能loader.unload(),也就是说Loader.content本身的修改一定会导致画面的即时变化?
那如果只用一个Loader,addChild的时候将loader.content复制到一个新的BitMap进行显示,是不是会好一些呢。
比如像这样:http://stackoverflow.com/questions/7104821/duplicate-loaders-content-multiple-times-via-addchild
还有,如果我是上面这样做的,那加载到舞台上以后我应该怎么叫这个BitMap,怎么操作它?除了removeChild以外。
——这部分的答案是,每个对象都可以用.name给它起个名字,然后用getChildbyName的方式来取得这个对象……=_=
另外还有,回收机制到底是怎样的。
比如removeChild一个BitMap,也没有任何指针指向它,它会被自动回收吗?或者还是需要取得这个BitMap的名字,然后手动XO掉呢。
或者还是采用一个图层对应一个Loader的办法。似乎这样卸载图片会比较方便。http://hi.baidu.com/silvanote/blog/item/3fe99a7d156a260428388af0.html/cmtid/40263b1aeeb010ba4bedbc78
不熟悉的语言真是麻烦啊。= =
建立一个基于MovieClip的base层,载入背景图片,根据情况往上添加立绘或者其他的图片。
在图片全部载入完成之后trans出来。
使用Loader加载图片的实验基本是OK的:
(1)每个图层用了一个单独的Loader。
(2)注意在加载完成之前是不能显示滴。
(3)基本做法是每个Loader加载成功的监听函数里,将对应的变数设成true,一直到全部加载完成以后再调用addChild依次添加图层。
(4)执行Transition之前base层的visible设为0的话,Transition之后也会自动显示出来。如果之前visible就设为1的话,屏幕会有闪一下的现象发生(也就是addChild先执行了立即显示,然后再进行Transition)。
又,突然发现as3的函数是可以嵌套定义的,也就是说监听读取完成的函数可以写到读取函数的内部。不知道这样可不可以更简单地达成如(3)的效果。
接下来要解决的问题:
这样执行的话,如果要多次换图片就是马上换,换完再trans,很可能造成屏幕各种闪的状况。
那咋么样实现类似krkr的表、里页切换方式?
也就是里页改变图片->完成后再进行表里交换。只用一个影片剪辑做得到咩……
预备参考:http://code.google.com/p/ghostcat/
里面有个切换效果相关的代码……http://bbs.9ria.com/viewthread.php?tid=38570&extra=&page=1
PS:
按理说Loader就应该能起到代替里页的作用了,
可是实际上在addChild(Loader.content)以后,改变Loader.content的内容又会发生什么呢……=_=
因为addChild(loader.content)后不能loader.unload(),也就是说Loader.content本身的修改一定会导致画面的即时变化?
那如果只用一个Loader,addChild的时候将loader.content复制到一个新的BitMap进行显示,是不是会好一些呢。
比如像这样:http://stackoverflow.com/questions/7104821/duplicate-loaders-content-multiple-times-via-addchild
还有,如果我是上面这样做的,那加载到舞台上以后我应该怎么叫这个BitMap,怎么操作它?除了removeChild以外。
——这部分的答案是,每个对象都可以用.name给它起个名字,然后用getChildbyName的方式来取得这个对象……=_=
另外还有,回收机制到底是怎样的。
比如removeChild一个BitMap,也没有任何指针指向它,它会被自动回收吗?或者还是需要取得这个BitMap的名字,然后手动XO掉呢。
或者还是采用一个图层对应一个Loader的办法。似乎这样卸载图片会比较方便。http://hi.baidu.com/silvanote/blog/item/3fe99a7d156a260428388af0.html/cmtid/40263b1aeeb010ba4bedbc78
不熟悉的语言真是麻烦啊。= =
.as | |
File Size: | 1 kb |
File Type: | as |
通过两个影片剪辑模拟表里页切换的一个实验范例
import flash.display.Bitmap;
import flash.display.MovieClip;
import flash.events.Event;
import fl.transitions.*;
import fl.transitions.easing.*;
//空白影片剪辑两个,作为表页和里页
var back=new layer();
addChild(back);
var fore=new layer();
addChild(fore);
//预载的背景图和立绘图
var bmp1=new Bitmap(new sky_dt2(0,0));
var bmp2=new Bitmap(new moli_01(0,0));
var bmp3=new Bitmap(new sky_nt_rain(0,0));
var bmp4=new Bitmap(new moli_01(0,0));
//加入图片到表页
fore.addChild(bmp1);
fore.addChild(bmp2);
//第一次切换显示(空白到显示内容)
var myTransitionManager=new TransitionManager(fore);
myTransitionManager.startTransition({
type:Blinds,
direction:Transition.IN,
duration:1.5,
easing:None.easeNone,
numStrips:30,
dimension:1
});
myTransitionManager.addEventListener("allTransitionsInDone",onTransitionCompleted);
//第一次切换显示完成
function onTransitionCompleted(e:Event)
{
//里页载入图片
//这里如果添加了和表页相同的内容,那部分内容就会立即从表页消失
//所以改变内容和trans之前,里页的内容应该通过复制和表页相等(也就是backlay的作用了=v=)
back.addChild(bmp3);
back.addChild(bmp4);
//表里交换
var tmp=fore;
fore=back;
back=tmp;
tmp=null;
//保持表页顺位
swapChildren(fore,back);
//第二次切换显示(从原来显示的画面切到新画面)
TransitionManager.start(
fore,
{
type:Blinds,
direction:Transition.IN,
duration:1.5,
easing:None.easeNone,
numStrips:30,
dimension:1
});
}
import flash.display.MovieClip;
import flash.events.Event;
import fl.transitions.*;
import fl.transitions.easing.*;
//空白影片剪辑两个,作为表页和里页
var back=new layer();
addChild(back);
var fore=new layer();
addChild(fore);
//预载的背景图和立绘图
var bmp1=new Bitmap(new sky_dt2(0,0));
var bmp2=new Bitmap(new moli_01(0,0));
var bmp3=new Bitmap(new sky_nt_rain(0,0));
var bmp4=new Bitmap(new moli_01(0,0));
//加入图片到表页
fore.addChild(bmp1);
fore.addChild(bmp2);
//第一次切换显示(空白到显示内容)
var myTransitionManager=new TransitionManager(fore);
myTransitionManager.startTransition({
type:Blinds,
direction:Transition.IN,
duration:1.5,
easing:None.easeNone,
numStrips:30,
dimension:1
});
myTransitionManager.addEventListener("allTransitionsInDone",onTransitionCompleted);
//第一次切换显示完成
function onTransitionCompleted(e:Event)
{
//里页载入图片
//这里如果添加了和表页相同的内容,那部分内容就会立即从表页消失
//所以改变内容和trans之前,里页的内容应该通过复制和表页相等(也就是backlay的作用了=v=)
back.addChild(bmp3);
back.addChild(bmp4);
//表里交换
var tmp=fore;
fore=back;
back=tmp;
tmp=null;
//保持表页顺位
swapChildren(fore,back);
//第二次切换显示(从原来显示的画面切到新画面)
TransitionManager.start(
fore,
{
type:Blinds,
direction:Transition.IN,
duration:1.5,
easing:None.easeNone,
numStrips:30,
dimension:1
});
}