blog.Ring.idv.tw

Articles

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

在「變數範圍-在「Function」上用「var」來宣告變數的差異(一)」一文中,我們曾提及在「Function」加上「var」宣告,才是明確的定義此變數為「區域變數」,否則便是「實體(時間軸)變數」,倘若我們少打了「var」來宣告的話,那會造成多大的影響呢?這裡我們就來比較一下兩者間的執行速度。

存取「區域變數」遠比「實體(時間軸)變數」快

區域變數

function test()
{
	var i = 10;
	for(var j = 0 ; j < 100000; j++)
	{
		i+=j;
	}
}
var start = getTimer();
test();
trace(getTimer()-start);

結果:(取決於電腦速度而有所不一)

114

實體(時間軸)變數

function test()
{
	i = 10;
	for(var j = 0 ; j < 100000; j++)
	{
		i+=j;
	}
}
var start = getTimer();
test();
trace(getTimer()-start);

結果:(取決於電腦速度而有所不一)

233

從結果來看,由於區域變數會使用到Flash Player內部所提供的暫存器來儲存之,造成兩者在上述的範例測試中,執行速度差距有二倍之多(114ms vs. 233ms),所以不可不慎!~

2007-06-29 17:38:37 | Add Comment

Adobe Integrated Runtime (AIR) for JavaScript Developers Pocket Guide

Adobe Integrated Runtime (AIR) for JavaScript Developers Pocket Guide

The pocket guide covers:

* Introduction to AIR

* Getting Started with AIR development

* Working with JavaScript and HTML within AIR

* AIR Mini Cookbook

* Command line tools

* Aliases

2007-06-29 00:52:09 | Add Comment

變數範圍-「loadVariables」vs.「loadVariablesNum」

想要從Flash載入外部資料,其實有許多樣的方式可以善加利用,譬如:「loadVariables」、「LoadVars」、「XML」等…

然而這些從外部載入進來的資料,必然有其自己所屬的變數範圍,所以本文將探討「loadVariables」vs.「loadVariablesNum」兩者的差異~

「loadVariables」vs.「loadVariablesNum」的差異

從ActionScript 2.0 Language Reference的文件說明中,我們大概即可得知兩者間的不同,整理如下:

Global Function

loadVariables(url:String, target:Object, [method:String]) : Void

loadVariablesNum(url:String, level:Number, [method:String]) : Void

MovieClip Method

loadVariables(url:String, [method:String]) : Void

從上述我們可以知道「loadVariablesNum」是「Global Function」,而「loadVariables」則有「Global Function」和「MovieClip Method」兩種,接著我們再來推論載入的方式。

「_root == this」&「this == _level0」&「_level0 == _root」

請將下述程式寫在Frame[1]:

trace(_root == this);
trace(this == _level0);
trace(_level0 == _root);

結果為:

true
true
true

從結果即可證明「_level0」、「_root」和「this」三者之間都是指向同一個「MovieClip」,所以我們即可推論下述的載入方式都是相同的:

loadVariablesNum("test.txt",0);
loadVariables("test.txt",_level0); //Global Function
loadVariables("test.txt",this); //Global Function
loadVariables("test.txt",_root); //Global Function
_level0.loadVariables("test.txt"); //MovieClip Method
this.loadVariables("test.txt"); //MovieClip Method
_root.loadVariables("test.txt"); //MovieClip Method

為何需要「loadVariablesNum」

從上述的論點再來推測,我們是否可以直接執行「loadVariables("test.txt",_level1)」或「_level1.loadVariables("test.txt")」來取代「loadVariablesNum」呢?

答案是「否定的」~為何如此?我們來看下述這個範例:

trace(typeof(_level0));
trace(typeof(_level1));

結果:

movieclip
undefined

從上述的結果來看,「_level0」這個「MovieClip」早就存在於Flash Player裡頭了,然而「_level1」卻仍然尚未被定義的~

也就是說執行「loadVariables("test.txt",_level1)」或「_level1.loadVariables("test.txt")」,並不會為我們在「_level1」建立一個「MovieClip」,我們必須利用「loadVariablesNum("test.txt",1)」才行!!所以無論是「loadVariables」或「loadVariablesNum」,它們的變數範圍其實都隸屬於實體(時間軸)變數。

最後只要了解「Layer」、「Level」和「Depth」之間的三角關係(四),以及本文所推論及驗證的一些觀念,相信你一定可以自由運用「loadVariables」和「loadVariablesNum」。

2007-06-23 17:28:52 | Add Comment

Installing Flash Lite 2.1 on Nokia N73 & N70

圖片來源:http://mobilesearch.nokia.com

Flash Lite簡易安裝步驟

Step 1.下載Flash Lite 2.1 for Symbian(請下載Flash Lite 2.1 Standalone Player for Symbian S60 V3.0)

Step 2.將flashlite2_1_symbian_s60V3.SIS傳至你的手機,接著直接點選安裝即可。

用「handset_test」來測試它一下:

不支援的部份:

hasAccessibility
hasAudioEncoder
hasCMIDI
hasMFI
hasMouse
hasPrinting
hasScreenBroadcast
hasScreenPlayback
hasSMAF
hasStreamingAudio
hasStreamingVideo
hasStylus
hasVideoEncoder

ImageMIMETypes:

image/jpeg,image/png,image/gif

VideoMIMETypes:

video/3gpp,video/mp4

手機王「Nokia N73」詳細規格

2007-06-21 13:37:54 | Add Comment

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

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

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::