[as3]動態顯示元件的順序

  • 178
  • 0

怎麼設定z-index呢?或者碰到元件被另一個元件蓋住時,到底是怎麼個原因呢?

也許有人會跟我有一樣的做法和碰到一樣的問題:

我的元件都用Layer(圖層)排得好好的,

可是我要控制元件的隱藏與顯示時(MovieClip.visible=false或MovieClip.visible=true),

元件的順序竟然跑掉,原本在上方的元件反而跑到下方了!!!

如果跟我一樣是用visible來切換元件可視度的人,

先別急著上網查z-index或addChild這些做法~

先說說z-index是怎麼做的:

http://stackoverflow.com/questions/16637956/as3-manipulating-z-index-dynamically

也就是利用

setChildIndex(MovieClip, i);

來修改元件的順序。

i就是你要被擋住(z-index比較小的)那個元件順序(索引)。

網上還有用addChild這種作法,

這種最不推薦!

然而卻是很簡單的方法。

因為你用了addChild(你的元件名稱)後,你的元件會重新加到佈景中,

因此達到讓你要的元件放在最上面的效果。

然而!

缺點就是它有可能真的多加了你的元件一次!

這樣就可能導致有兩個以上已經被設定好一樣name的元件出現在場景中,

那麼很容易導致出錯。

假如你切換場景時(比方從Scene 1 gotoAndPlay 到 Scene 2),

就容易造成畫面出錯~(就類似於很多程式裡面對於元件的name或id重複的結果)

那麼現在要教的方法很簡單,

基本上都不需要以上的作法。

你要做的就是清楚明白你的元件的前後順序,

然後!

依照最後面顯示到最前面顯示來寫程式就可以了!

比方我有個元件名字叫obj1,另一個元件名字叫obj2。

obj1會在obj2的前面,

因此當我要顯示這兩個元件時,

只要這樣寫:

obj2.visible=true;
obj1.visible=true;

就這麼簡單!

若你的情況是obj1在obj2後面,

那麼就是相反:

obj1.visible=true;
obj2.visible=true;

所以類似FIFO的概念~(先進後出)

如此一來,你再也不用擔心改變visible=true時,你的元件顯示的效果不如你想要的了!

缺點就是你要很清楚元件的順序而已~

是的,這篇有教跟沒教一樣!

同樣的,如果你是用動態產生元件,

addChild時,也依照哪個要放最前面的擺到最下面來寫,

也是一樣的道理喔!