Flash ActionScript3 殿堂之路5

重點筆記
p04-02函式語句vs.函式運算式
<<語法>>
函式語句
function 函式名 (
參數1名稱:類型=預設值,參數2…):回傳值型別{
}

函數運算式
var 函數名:Function=function(
參數1名稱:類型=預設值,參數2…):回傳值型別{
}

不同點:
  1. 函式語句不論定義在那裡,都會先compiler,因此到處都可使用,而函數運算式在使用前要先定義好
  2. 函式語句的this關鍵字指向目前函數定義的區域;函數運算式隨函數附著的物件不同而隨之改變。
ex:
var num:int=3;
function A(){
trace (num);
trace (this.num);
trace (this);
}
var B:Function=function(){
trace (num);
trace (this.num);
trace (this);
}
var obj:Object={num:300};
obj.a=A;
obj.b=B;

A();
B();
obj.a();
obj.b();
前面三個的結果為:
3
3
[object MainTimeline]
obj.b();的結果為:
3
300
[object MainTimeline]

p04-06參數資訊:arguments物件
arguments.length==>回傳參數的個數

Random()值轉正整數

temp=Math.floor(Math.random()*範圍值);
若範圍值寫6,則temp會出現的值為 0~5

SharedObject的用法

1.先在畫面拉一個輸入文字,取名為 input_txt
2.隨便做一個按鈕,取名為 save_btn
3.在主時間軸貼上程式碼:

AS2.0
var so:SharedObject=SharedObject.getLocal("mySaveData", "/");
if(so.data.mySaveData!=null){
input_txt.text=so.data.mySaveData;
}

save_btn.onPress=function(){
so.data.mySaveData = input_txt.text;
so.flush();
}

AS3.0
var so:SharedObject=SharedObject.getLocal("mySaveData","/");
if(so.data.mySaveData!=null){
input_txt.text= so.data.mySaveData;
}

save_btn.addEventListener(MouseEvent.CLICK, function(e:MouseEvent){
so.data.mySaveData = input_txt.text;
so.flush();
});

//---------------------------------------------------------------------------------------------------------
檔案位置:
var so:SharedObject=SharedObject.getLocal("mySaveData", "/");
檔案在:
C:\Documents and Settings\登入者名稱\Application Data\Macromedia\Flash Player\#SharedObjects\xxxxxx\localhost
檔名:mySaveData

如果是寫var so:SharedObject=SharedObject.getLocal("fun/mySaveData", "/");
檔案會在:
C:\Documents and Settings\登入者名稱\Application Data\Macromedia\Flash Player\#SharedObjects\xxxxxx\localhost\#fun
檔名:mySaveData

http://tw.knowledge.yahoo.com/question/question?qid=1508082402461
http://tw.knowledge.yahoo.com/question/question?qid=1608083004985
http://tw.knowledge.yahoo.com/question/question?qid=1609071005840

Flash作品:雙食蛇 單人版


一個人要控制兩條蛇,東西不能亂吃喔!哈!左右腦共用。

遊戲Bug:
1.因為增加食物的函式不是標準的演算法, 把遊戲畫面填滿說不定會出現BUG...還沒做測試。
以下為偷懶的演算法:
do{
tempx=Math.floor(Math.random()*backgroundX);
tempy=Math.floor(Math.random()*backgroundY);
}while(map[tempx][tempy].currentLabel!="empty");
照道理是不能這樣寫啦…東西滿的話,就會跑無限迴圈了。不過據說這種演算法速度最快~
2.開始按鈕的圖層不是最高層,會被程式產生的蛇蓋住,到時重新開始時,可能會按不到…遊戲說明我倒是已經改好了。
3.蛇的前進速度,我還沒想到要什麼時候加速比較合適,加速的進行方式太多了。 ex:吃到東西加速、到達一定分數後加速、玩家自己控制(選擇的速度愈快,每吃一個食物分數就加得愈高)...方法太多了,隨便想想就3個,要用什麼好呢?


孔子說~

子曰:「譬如為山,未成一簣,止,吾止也!譬如平地,雖覆一簣,進,吾往也!」
我在準備證照最難過的時候,突然想起這句話。有人說準備證照很簡單,也許是吧,考過後真的覺得很簡單,但對我而言最難過的是在準備考試時那種不安的心情,你到底能不能通過?證照的考試範圍那麼大,你唸到重點了嗎?還是你唸到的都是廢話?看到不懂的章節,悶著頭看,還是看不懂,怎麼辦?
有時真的覺得那一陣子像地獄,白天工作,晚上自己在那邊唸,尤其東西全部是自己準備,沒補習、周遭也沒人好問。
這時靜下心就會想到這句話,真的給我了一個定心丸,你一但放棄了,就什麼都沒有了,之前的努力也都付諸流水,咬著牙關前進,才是唯一的道路。

考完後就開始感謝國中的古老師了,以前被逼著唸論語,一本全部都背起來,問我現在記得多少?老實說我也只記得這一篇,其它都忘光光,但幸好有唸,不然考不到吧,也許這是人生意想不到的轉捩點!?
Category: 0 意見

Box下載說明


右邊的Box放了一些我的作品,下載方式參左邊的圖片。
若上面出現"Please Wait"的字樣,表示正在下載清單中,稍等一下就好了。
若出現一片空白,什麼字都沒有,可能你的瀏覽器不支援Flash,有需要的話,再寫信給我,我再寄給您。
knowledge.temp@yahoo.com.tw
Category: 0 意見

Flash作品:貪食蛇 雙人版

貪食蛇v02.swf是單人遊戲,貪食蛇v05可以雙人競爭!!


貪食蛇v05.swf

20100820 v05更新:
1.若蛇頭對撞,則有一隻會不見--已修正 (感謝scu1012提供bug.)
2.一局結束後,下局開始時,分數仍是上局的分數。
3.遊戲中有時會發生作者資訊擋在遊戲畫面的狀況。

Flash ActionScript3 殿堂之路4

重點筆記
p03-10迴圈:for...in 和 for each ... in
直接看範例
ex:
var obj:Object=new Object();
obj.name1="First Name";
obj.name2="Second Name";
obj.name3="Third Name";
for(var i in obj){ //顯示name1、name2、name3 ==>得到成員名稱
trace(i);
}

for each (var j in obj){
//顯示First Name、Second Name、Third Name ==>得到成員的值
trace(j);
}

p03-17switch判斷式
switch會使用全等運算子(===)來判斷值是否相同,==和===的差別參Flash ActionScript3 殿堂之路2

Flash ActionScript3 殿堂之路3

重點筆記
p02-37typeof運算子
回傳物件型別(是字串
ex:
trace(typeof 10); //顯示number

物件類型==>返回字串
Array==>object
Boolean==>boolean
Function==>Funciton
int==>Number
Number==>Number
Object==>Object
String==>string
uint==>number
XML==>xml
XMLList==>xml

p02-37is運算子
判斷一個物件是否為某個型別,是的話回傳true;否的話回傳false
ex:
trace(9 is Number) //9是否為Number型別,回傳true

p02-37as運算子
判斷一個物件是否為某個型別,是的話回傳這個物件;否的話回傳null
ex:

trace(9 as Number) //9是否為Number型別?是,回傳9
trace(9 as Array) //9是否為Array型別?否,回傳false

p02-38in運算子
判斷一個物件是否為另一個物件的key或索引,是的話回傳true;否的話回傳false
ex:
var a:Array=["a","b","c"];
trace(2 in a);//true
trace(3 in a);//false,a陣列中沒有索引為3的元素

var b:Object={name:"myObject", value:5};
trace("name" in b); //true
trace("str" in b);//false

p02-38delete運算子
刪除物件的動態屬性,(非動態屬性無法刪除)
ex:
略…

Flash ActionScript3 殿堂之路2

重點筆記
p02-31餘數運算子 %
需注意運算元若不是整數,可能會出現意外的結果。
ex:
var a:int=13;
trace(a%5)//3
trace(13.1%5)//3.0999999999999996,不是3.1
trace(12.2%6.1)//0,剛好整除
trace(12.5%6.1)//0.3000000000000007

p02-33全等運算子(===)與等於運算子(==)
全等運算子不會做型別轉換;而等於運算子會自動做型別轉換。
若運算元是int、uint、Number這三種整數型別,則數值相等就回傳true(不論型別是否相同)
ex:
var a:int=1;
var b:String='1';
var c:Boolean=true;
trace(a==b);//回傳true,書本範例這樣寫會回傳true,但我compiler無法通過??
trace(a===b);//回傳false
書本範例這樣寫會回傳false,但我compiler無法通過??
trace(a==c);//回傳true
trace(a===c)//回傳false

若兩邊的運算元的值是Nan時(Number型別),則兩種運算子都會回傳false
若兩邊的運算元的值是null及underfined,則全等運算子(===)會回傳false;而等於運算子(==)會回傳true
ex:
trace(NaN==NaN); //false
trace(NaN===NaN);//false
trace(undefined==null)//true
trace(undefined===null)//false


若是比較使用包裝類別來建立的物件,直接使用全等運算子(===)和等於運算子(==)比較的話,會回傳true。(在Java及AS2.0會回傳false)
ex:
var a=new Number(5);
var b=new Number(5);
trace(a==b);//true
trace(a===b);//true

Flash ActionScript3 殿堂之路1

重點筆記:

p02-12
宣告常數:const關鍵字
ex: const 變數名稱 : 基本資料型別 = 初值;

p02-13
常用的資料型別
Boolean,布林值,預設值false
int,整數,預設值0
unit,正整數,預設值0
Number,浮點數,預設值NaN(not a number)
注意兩個數值做任何運算,若其中一個是Nan,則結果就會是Nan。
Number型別的程式有bug
BUG1==>0.1連加10次變0.99999~,要求得整數,需使用Math.round()修正

ex:
var n:Number=0.1;
for(var i:int=1;i<10;i++){
n+=0.1;
}
trace(n);//輸出0.9999999999999999
BUG2==>太大的值和太小的值相加時,小值會被捨去。

String,字串,預設值null或空字串(依串告方式不同而不同預設值)
ex:
var s1:String; //null
var s2:String=""; //空字串
var s3:String= new String(); //空字串
var s4:String= new String('abc'); //abc
Array,陣列,不支援型別化陣列,預設值參範例
ex:
var a:Array; //null
var b:Array=[ ] ; //空白
var c:Array=new Array();//空白
var d:Array=new Array(5);//宣告長度為5的陣列,陣列中的元素為空白
Object,物件,為動態,即可隨時加入新的成員(成員就是屬性和方法),預設值null
ex:
var a:Objec; //null
var b:Object=new Object();//使用構造函數建立新物件 構造函數?這名詞我看不懂,是建構子嗎??
var c:Object={};//用空的大括狐對作為new Object()函數的語法快捷方式,可把屬性一起寫進去
var d:Object={name:"objectName"} //建立物件時順便加屬性
var e:Object={hello:function(){trace("Hello")}};//建立物件時順便加方法,很少用

存取物件成員的方法:有兩種,一種是使用 . (點) 運算子,另一種是陣列運算子
ex:
var a:Object=new Object();
a.name="myName"; //使用點運算子
a['name']="myName"//使用陣列運算子

若變數有宣告,但沒有設型別,則此變數的預設值為undefined
ex:

var a; //undefined
var b:*;//undefined

Flash作品:貪食蛇


遊戲下載:貪食蛇v02.swf

原本只是想寫一個玩玩,寫完後想做雙人玩的貪食蛇,接著又想加入AI寫人跟電腦競爭,要寫AI的話就要加入演算法,雖然演算法我找到了,但想到目前的程式是用目前位置來判斷是否有碰到東西,而不是用陣列,想要用AI的話,應該要使用陣列來記錄位置,然後再演算出最佳路徑,可是程式碼等於是整個要全部改掉…暫時先放著吧,我心情好再來改~