blog.Ring.idv.tw

Articles

變數範圍-在「Function」上用「var」來宣告變數的差異(一)

從「變數範圍-在「Frame」上用「var」來宣告變數的差異」一文中我們可以得知,在「Frame」上無論是否使用「var」來宣告變數,其實是沒有太大的差異的~但是在「Function」上卻俱備重要的意義。

在「Function」上用「var」來宣告變數的差異

我們依然製作兩個欲測試的flash(均發佈為Flash Player 9),並且在它們的「Frame 1」個別加上些程式以便驗證,如下述:

var:Frame 1

i = 10;
function test()
{
	var i = 20;
}
test();
trace(i);

結果:

10

non_var:Frame 1

i = 10;
function test()
{
	i = 20;
}
test();
trace(i);

結果:

20

從兩者的結果中,其實我們就可以發現在「Function」加上「var」宣告,才是明確的定義此變數為「區域變數」,否則便是「實體(時間軸)變數」,然而這從這兩者的bytecode上來看的話,前者是利用ActionCode「0x8E」(ActionDefineFunction2)的方式來定義,而後者則是利用ActionCode「0x9B」(ActionDefineFunction),這兩者最大的差別在於前者(ActionDefineFunction2)可以將「參數」或「區域變數」利用Flash Player內部的「Register」來取而代之,而且更擴增「Register」到「255」個,以便增強其執行速度~但這並不是重點所在,重點在於前者的「test()」function裡面是利用ActionCode「0x87」(ActionStoreRegister)來將「20」這個值儲存於「Register」之中,所以我們在「Function」之外並無法取得它,也就是所謂的「區域變數」,而後者則是利用ActionCode「0x1D」(ActionSetVariable)來將「20」這個值儲存於「_level0」這個MovieClip的「實體變數」之中,這便是兩者之間的差異所在。

範例下載

本文若有任何謬誤,希望請不吝地賜教,若能指正不勝感激。

2007-06-13 01:45:30 | Comments (2)

變數範圍-在「Frame」上用「var」來宣告變數的差異

在「Frame」上用「var」來宣告變數的差異

基本上要宣告「區域變數」我們必須加上「var」來宣告之,為何筆者要加上「必須」來強調呢?這是因為加上「var」宣告在「Function」和宣告在「Frame」之間兩者將有所差異,所以我們不妨先看下述這兩個例子:

筆者製作兩個欲測試的flash,並且在它們的「Frame 1」個別加上些程式以便驗證,如下述:

var:Frame 1

var i = 10;
trace(i);

結果:

10

non_var:Frame 1

i = 10;
trace(i);

結果:

10

從上述的例子之中,我們可以發現其實兩者的結果是相同的,但是將它們的bytecode攤出來看之下,的確可以發現些端倪~

在「var i = 10;」宣告之下所採用的ActionCode為「0x3C」(ActionDefineLocal),相反的若直接採用「i = 10」來宣告的話,其所採用的ActionCode則為「0x1D」(ActionSetVariable),然而重點在於Flash雖然在兩者之間採用不同的ActionCode來處理,但是在取值的方式卻是利用相同的「0x1C」(ActionGetVariable)來取得變數值,所以我們可以就此推論:在「Frame」上無論是否使用「var」來宣告變數,其實是無傷大雅地!然而在「Function」卻並非如此~

By The Way, 在ActionScript 3.0之下採用「i = 10」的方式宣告變數是無法完成編譯的!

範例下載

本文若有任何謬誤,希望請不吝地賜教,若能指正不勝感激。

2007-06-12 21:48:49 | Add Comment

「Scene」骨子裡就是個「Frame」

「Scene」骨子裡就是個「Frame」

我們做個實驗來驗證「Scene」這個特殊的「Frame」~

這裡我們製作了兩個Flash~它們分別為「Scene」和「Frame」~如下述:

Scene

Scene 1

trace("Scene 1:"+this);

Scene 2

trace("Scene 2:"+this);

Frame

Frame 1

trace("Frame 1:"+this);

Frame 2

trace("Frame 2:"+this);

從dump出來的結果中~我們可以發現上述兩個swf檔,最大的差異僅在於「trace()」function中的「Scene」、「Frame」兩個字串不一樣而已,由此即可證明Flash在發佈之前所對於「Scene」做的特殊處理,便是將它轉化成「Frame」的方式。

範例下載

2007-06-12 17:31:13 | Add Comment

Adobe Integrated Runtime (AIR)

Adobe Integrated Runtime (AIR)

Adobe® AIR™, formerly code-named Apollo, is a cross-operating system 
runtime that allows developers to use their existing web development 
skills to build and deploy rich Internet applications to the desktop.

先前的Apollo(codename)在6月11日已經被Adobe正式命名為Adobe Integrated Runtime (AIR),你可以從「Adobe AIR Installer」來下載安裝,不過有一點要注意的是,如果您先前有安裝過Apollo Alpha的話,你必須先將Apollo移除後再安裝Adobe AIR才行!

如果想要在Flash下製作AIR applications的話~根據下述的說明,我們必須暫且等等~因為目前仍努力開發中~

Develop on Adobe AIR with Flex and Flash

Adobe is currently working on an Adobe® AIR™ extension to Adobe Flash CS3 Professional to
enable building new applications using Flash CS3 Professional.

這次的版本釋出,文件方面也補足了許多~有興趣的人可以來這「Adobe Integrated Runtime (AIR) SDK」下載!

版本演進

.2007.03.19 發佈Adobe Apollo 1.0 Alpha 1

.2007.06.11 發佈Adobe AIR 1.0 Beta 1(Apollo 正名為 Adobe AIR)

.2007.10.01 發佈Adobe AIR 1.0 Beta 2

.2007.12.12 發佈Adobe AIR 1.0 Beta 3

2007-06-12 00:51:25 | Add Comment

「Layer」、「Level」和「Depth」之間的三角關係(四)

經由「Layer」、「Level」和「Depth」之間的三角關係(一、二、三)的相關實例與驗證,我們整理出一些重點出來,進而釐清這三者之間所存在的微妙關係,如下述幾點:

「Layer」、「Level」和「Depth」重點概念

1.基本上在Author time所呈現的視覺化「Layers」都將被轉化為「Depths」。

2.每個「MovieClip」都擁有自己的「Depth」。

3.「Depth」範圍在「-16384~2130690044」均可指定。

4.「Level」是隸屬於「Flash Player」中的堆疊結構。

5.「Level」級數可達「0~19310575612」。

「A picture is worth a thousand words」

從上述的幾個重點,筆者繪製下圖以方便理解:

換句話說,如果我們在撰寫ActionScript的一些應用時,倘若沒有使用到任何與「Level」有關的function,例如:「loadMovieNum()」、「loadVariablesNum()」等等…,其實絕大部份我們只會在「_level0」活動活動筋骨而已,然而掌握住這些要點,卻是奠定往後釐清各個觀念的不二法門,例如:「變數範圍」…。

2007-06-10 01:43:10 | Add Comment

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

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::