多语言展示
当前在线:1332今日阅读:19今日分享:20

flash对象永远置顶的众多技巧@张志晨as3经验46

在制作flash动画时,我总是希望某些对象置顶,如标题、宣传类的logo图案等。本人经过研磨,总结出一些方法来,奉献给能看懂的人。看得懂的人才知道知识是宝藏!
工具/原料

flash as3

方法/步骤
1

知识准备:   有人说,as3没有层深了,对象的层交由flash自己管理。经过一些研究,我有了新的认识。   1.有对象存在,就必然有层次存在。不能说as3没有层深了,与as2不同的是:as3的层是连续的,总是从最底层的0往上排列,不再象as2,你可以指定任意深度。   2. as3的层深是个连续的数组: 对象. numChildren可以获得对象内部子对象的个数,这个数减去1就是最高层。 父对象.getChildIndex(子对象),可以获得子对象的层深。   3.一个对象只能有一个层深。于是,我们可以通过遍历层深访问舞台上的每一个对象。这有用吗?试想,舞台上有成千上万个对象,又没有一一命名,也没有压入数组,你想控制它们,怎么办? 有这样一个现实的例子,做电子地图时,需要标注地名,一个字是一个静态文本,总标注了1985个字。大家知道,静态文本不支持命名,如果要取得这些文字的内容及在地图上的位置,你有办法用代码实现吗?我有,我办到了,用到就是遍历层深。从而找到每一个字。访问方法: 父对象. getChildAt(index),index为层深变量,自定义。 然后判断它是不是静态文本框,如果是,就获取我们需要的东西(text,x,y,rotation)。   4.后添加到舞台(显示对象列表)的,总是处于最高(并且决定Tab键的顺序)。

2

常用方法:    在动画中,我们常常需要动画的标题、logo图案永远置顶,这就是做层深管理。   常用的方法是:       1.如果没有动态添加的对象,就在设计时把它们做在最高的图层上。应该说,这个谁都会。       2.如果有动态添加的对象,但它不会遮盖到需要置顶的对象,仍然用上一个方法。       3.如果动态添加的对象,能够通过遮罩技术做处理的,仍然可用第一种方法。   否则:我只有改变层深了。常用方法如下:   a.获取最高层,再设置层次。       var index:int=置顶的对象.parent. numChildren-1---获取最高层数       置顶的对象.parent. setChildIndex(置顶的对象,index) 实用中的例子:   在拼图游戏中,我们拖动哪个图片,就把哪个图块“置顶”,放下后“沉底”。   “置顶”:e.target.fatherMc. setChildIndex(e.target, e.target.fatherMc. numChildren-1)   “沉底”: e.target.fatherMc. setChildIndex(e.target, 0)   b.如果你觉得上面的方法麻烦,就把你要置顶的对象再添加一遍:  置顶的对象.parent.addChild(置顶的对象)

4

知识延伸:    那么我可不可以改变stage里对象的层次呢?可以!   这样测试:        stage.setChildIndex(this,1)  结果会发现:root升级了,跑到1层上来了。刚才那个包含标题、图标的mc又被遮挡了。

5

最终结论:    如果一些对象的层次关系不想改变,就添加到stage下,并一次性调整好层次,便可置顶的永远置顶,沉底的永远沉底,一劳永逸!

推荐信息