blog.Ring.idv.tw

Articles

「Target Path」命中你的目標實體(四)

在一系列的「Target Path」命中你的目標實體(一、二、三)所曾提及過的「_root」、「_parent」和「this」,在本文中我們將配合著這些觀念來加以活用。

「_root」絕對路徑 vs. 「_parent」相對路徑

這裡我們設計一個簡單的範例來說明,我們在Stage上放置兩個「MovieClip」,一個名為「red_mc」的紅色矩形,另一個為「blue_mc」的藍色矩形,並在「red_mc」裡面附上一個「Button」,同時為此「Button」寫入下述程式:

on(release)
{
	trace(this);
}

結果:

_level0.red_mc

從結果中我們可以發現,寫在「Button」上的「on」事件處理程式,「this」所參考到的是此「Button」所處在的「MovieClip」(red_mc)而非此「Button」本身,這是因為「this」只能參考到一個「Object」或是一個「MovieClip」,反之寫在「MovieClip」上的「on」事件處理程式,便是參考到此「MovieClip」本身。

接著我們再將上述程式加點額外的控制,假設我們想在此「Button」上控制一個處在於Stage上的「blue_mc」,並將它的透明值改為50%,我們其實可以利用「_root」或是「_parent」的寫法:

相對路徑的寫法

on(release)
{
	_parent.blue_mc._alpha = 50;
}

絕對路徑的寫法

on(release)
{
	_root.blue_mc._alpha = 50;
}

上述兩種寫法都可以達到同樣的作用,一個是從元件內部往上一層實體去達成,另一個則是直接從「_root」實體去控制,倘若遇到較多層結構的寫法時,例如:「_parent._parent._parent.blue_mc.alpha = 50;」和「_root.blue_mc._alpha = 50;」,兩者相形之下,若不考慮元件間的相依性,絕對路徑的寫法相較而言簡潔了許多,當然這兩種寫法均仰賴著設計者如何去取捨,。

「_root」和「_parent」的取捨

無論使用「_root」或「_parent」的確都可達到相同的作用,那該如何去取捨這兩種用法呢?筆者建議你採用「高內聚力(High Cohesion)、低耦合力(Low Coupling)」的設計準則來加以取捨,因為使用「_parent」的作法,必然會造成元件之間相依性的提高,所以若沒有適當地切割元件與元件間的相依性,那往往會造成「牽一髮而動全身」的情況發生,採用此設計準則無非是希望元件能更具有彈性與獨立性。

範例下載

2007-07-02 22:40:33 | Add Comment

「Target Path」命中你的目標實體(三)

最後搞懂你的「_parent」目標位置

「parent」,字面上可以解讀為「父親/母親」的意思,所以顧名思義,「_parent」便是意指為你目前所處在於此實體的上一層實體(父親/母親),也就是說,我們可以利用「_parent」來控制上一層實體的種種行為,例如:改變它的「_x」和「_y」屬性值或呼叫它所提供的函數等。

這裡我們將「Target Path」命中你的目標實體(二)的範例加以修改一下,直接將「red」和「green」的Frame[1]改寫成:

trace(this._parent);

結果:

_level0
_level0.red

從結果中可以明確地知道,在「green」的上一層實體為「red」(_level0.red),而在「red」的上一層實體則為「_level0」,這也就是「_parent」的作用所在,或許讀者會覺得這樣一路下來感覺好像沒什麼多大的成就感,然而明確地了解這幾個屬性的用法並釐清觀念,才能為接下來要闡述的東西打好根基。

「Target Path」目標路徑的區隔「.」(dot)

通常我們要區分目錄夾的層級時,我們可以利用「\」符號來判別,例如:「C:\windows\temp」,倘若是要區分網址的層級時,我們便可利用「/」符號來加以判斷,例如:「http://blog.ring.idv.tw/temp/test.html」,然而在Flash要區分層層的元件結構,則必須採用「.」(dot)符號來加以區隔,例如:「_level0.red.green」。

範例下載

2007-07-02 21:05:20 | Add Comment

「Target Path」命中你的目標實體(二)

再搞懂你的「this」目標位置

「this」,字面上可以解讀為「這個」或是「這東西」的意思,所以顧名思義,「this」便是意指為你目前所處在於此實體的這東西,然而從「Target Path」命中你的目標實體(一)我們已知「_root」所指的就是處於「_level0」這個「MovieClip」,倘若我們在此「MovieClip」為它加上「this」,所以如果沒意外的話,那它應當也是代表著「_level0」囉?答案更是肯定!

trace(targetPath(this));
trace(this); //此作法較簡潔

結果:

_level0
_level0

結果如同我們所預期的顯示出「_level0」,或許上述的例子過於簡單,我們再來看一個稍為有點結構的例子:

範例:

我們先在Stage上放置一個紅色矩形的「MovieClip」,並在此「MovieClip」再放置一個綠色圓形的「MovieClip」,並給予兩者分別為「red」、「green」的實體名稱(instance name),結構如下圖所示:

並分別在這兩個「MovieClip」的Frame[1]寫下:

trace(this);

結果:

_level0.red
_level0.red.green

結果就像筆者先前所說的,基本上我們其實大多都在「_level0」活動活動筋骨而已,加上「_root」所指的就是「_level0」,所以這裡的「_level0」也代表著「根」的意思,也就是說,我們放置在Stage上的「red」和「green」這兩個「MovieClip」,它們的「根」也就是「_level0」,這從結果中可以清楚地知道,然而重點在於我們在這兩個「MovieClip」所寫的程式,它們分別呈現為「_level0.red」和「_level0.red.green」,不僅分別對應我們放置在Stage上的結構順序,也呼應「this」這個屬性的意義。

範例下載

2007-07-02 19:29:01 | Add Comment

「Target Path」命中你的目標實體(一)

在本文中,主要將說明「_root」、「_parent」和「this」這些用法及概念,讓你得以自由地操控「MovieClip」、「Button」等…,才不致於在層層的元件內繞來繞去,找不到該在何處下程式,或是寫在不該寫的地方。

先搞懂你的「_root」目標位置

在「Layer」、「Level」和「Depth」之間的三角關係(四)一文中,筆者曾繪製一個Flash Player內部運作的Level、Depth示意圖,從圖中可以知道「Level」和「Depth」之間的關係,然而基本上我們其實大多都在「_level0」活動活動筋骨,難道「_root」和「_level0」有點關係?答案是肯定的!

我們來看一下這個簡單的程式:

trace(targetPath(_root));
trace(typeof(_root));

結果:

_level0
movieclip

「targetPath」這個函數可以用來回傳所指定實體的目標路徑,所以從上述的結果即可證明「_root」所指的就是「_level0」這個「MovieClip」,若從字面上來解讀它的話,那它就是代表著「根」的意思,所以既然它是一個「MovieClip」,我們當然可以放置層層的元件在其中囉!

2007-07-02 18:29:45 | Add Comment

變數範圍-一個獨立於Flash Player中的物件「_global」(全域變數)

根據「ActionScript 2.0 Language Reference」在「_global」的描述中,我們可以知道它是在「Flash Player 6」之後出來的產物,這裡我們就來談談「全域變數」~

一個獨立於Flash Player中的物件「_global」

通常設定一個「全域變數」的變數或是函數的話,基本上用法大致如下:

程式一

_global.foo = 10;
_global.func = function()
{
	trace(this.foo);
}
func();

結果:

10

在上述程式的「func」匿名函數中,我們使用「this」來代表我們將存取此「_global」自身的一些屬性,而從結果中我們的確將「foo」屬性利用「trace」函數將它的值顯示在「Output Panel」中,接著我們再來看另一個例子:

trace(typeof(_global));

結果:

object

在「Output Panel」你會發現結果顯示出「_global」居然是一個物件?的確!Flash Player所設計的「全域變數」的確就是仰賴「_global」物件來加以達成的!

倘若我們將程式一利用「偵錯模式(Ctrl+Shift+Enter)」來看的話,你會發現下圖的證據所在:

2007-06-30 22:23:53 | Add Comment

Next Posts~:::~Previous Posts
Copyright (C) Ching-Shen Chen. All rights reserved.

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::