blog.Ring.idv.tw

Flash

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

「var」在Flash Player版本間的差異

我們在「變數範圍-在「Function」上用「var」來宣告變數的差異(一)」一文曾提及到「ActionDefineFunction」和「ActionDefineFunction2」兩者的區別,由於「ActionDefineFunction2」是在Flash Player 6 r65 版本之後才開始支援的指令(Instruction),所以這裡我們試著將先前的例子重新發佈為Flash Player 6,來觀察兩者之間的差異。

var:Frame 1

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

結果:

10

倘若我們直接從bytecode上來看,當發佈成Flash Player 6版本之後的確產生了一些變化,我們可以看到上述是利用ActionCode「0x9B」(ActionDefineFunction)來定義「Function」,而非先前的「ActionDefineFunction2」(請參考:變數範圍-在「Function」上用「var」來宣告變數的差異(一)),而且最重要的是,上述所宣告「區域變數」的方式是利用ActionCode「0x3C」(ActionDefineLocal)來處理的,這也就是兩者之間最大的不同,所以我們即可得知無論發佈成Flash Player 6或7之後的版本,只要在「Function」內採用「var」宣告變數,Flash便會採用「ActionDefineLocal」或「ActionStoreRegister」來處理之

範例下載

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

2007-06-13 11:54:42 | Add Comment

變數範圍-在「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

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

::: 搜尋 :::

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment