More Related Content
Similar to Chinese hans (20)
Chinese hans
- 2. 教材出處
Gary Rosenzweig, 2008, “ActionScript
3.0 Game Programming”, Macmillan
Computer Pub.
- 5. 產生視覺化的物件
(page-42)
本章使用原始檔(AA33GGPPUU0022__GGaammeeEElleemmeennttss..zziipp))
製作遊戲的第一步->>
產生並控制螢幕上的物件
使用元件庫的影片片段的兩種方式
方式一::直接拖拉到場景當中
在屬性視窗給予實體名稱
假如實體名稱為““myClipInstance””
使用myClipInstance來控制影片片段的屬性
myClipInstance.x = 300;
myClipInstance.y = 200;
- 6. UUssiinnggMMoovviieeCClliippss..ffllaa
方式二::完全用程式來產生
在元件庫內選取某個影片片段的元件
設定連結名稱,,讓程式可以存取影片片段
勾選 ““ EExxppoorrtt ffoorr AAccttiioonnSSccrriipptt””
設定類別名稱(通常會設成和元件名稱相同))
(以下的例子類別名稱為MMaassccoott,,大概是人名吧……??))
((圖22..22)) 設定元件連結的對
話框
- 7. 再利用以下的語法::
// 使用var宣告一個變數,名稱為myMovieClip
// 變數型態是Mascot
// 使用new替這個變數產生一個新的物件
// 實際上會呼叫Mascot的建構函式(目前尚未定義…)
// 注意變數型態和新物件型態都是Mascot
var myMovieClip:Mascot = new Mascot();
// 把myMovieClip這個影片片段加入到場景當中
addChild(myMovieClip);
因為我們還沒有設定任何屬性,,所以元件出現在
(00,,00))的位置
- 8. 修改成以下的語法::
// 一樣是宣告一個新的物件
var myMovieClip:Mascot = new Mascot();
myMovieClip.x = 275; // 修改物件X座標
myMovieClip.y = 150; // 修改物件Y座標
myMovieClip.rotation = 10; // 修改物件旋轉角度
// 一樣是把物件加入場景當中
addChild(myMovieClip);
- 9. 前面的範例只會產生一個物件
同一個元件在場景當中可以有很多份ccooppyy
以下的程式碼會產生1100個MMaassccoott
由左至右每次位移5500個像素
元件比例為5500%%
// 這個迴圈執行10次(複習一下迴圈參數的用法…)
for(var i=0;i<10;i++)
{
// 宣告新的Mascot物件
var mascot:Mascot = new Mascot();
// X座標以50為初始點, 位置隨著迴圈參數向右每次移動50
mascot.x = 50*i+50;
// Y座標固定在300
mascot.y = 300;
// X方向比例設為0.5, 就是50%的意思
mascot.scaleX = .5;
// Y方向的比例設為50%
mascot.scaleY = .5;
// 加上這行物件才會顯示在場景當中
addChild(mascot);
}
- 11. 製作按鈕 - MMaakkiinnggBBuuttttoonnss..ffllaa
元件類型可以是““影片片段””或““按鈕””
如果是““影片片段””,,必須加入事件監聽器(lliisstteenneerr))
讓影片片段可以接受事件,,像是““滑鼠點擊””事件
// 和前面範例差不多的語法
var myMovieClip:Mascot = new Mascot();
myMovieClip.x = 100;
myMovieClip.y = 150;
addChild(myMovieClip);
- 12. 替影片片段指定事件監聽器
使用 ““ aaddddEEvveennttLLiisstteenneerr(參數11,,參數22))””函
式
參數11::指定要接受何種輸入,,例如::
“ MouseEvent.CLICK” 代表按下滑鼠
參數2::指定一個函式名稱,,當接受到事件時會
執行這個函式
這邊是用““ clickMascot””……
// 所以程式碼像這樣…
myMovieClip.addEventListener(MouseEvent.CLICK,
clickMascot);
- 13. 接下來撰寫按下滑鼠會執行的函式
function clickMascot(event:MouseEvent)
{
// 按下滑鼠時輸出這段文字
trace(“You clicked the mascot!”);
}
以下這行會讓滑鼠顯示成手指的圖案
// 直接把影片片段的buttonMode 設為true
myMovieClip.buttonMode = true;
- 14. 假如你的元件原本就是““按鈕””
// 一樣的用法,不過類別型態是LibraryButton
var myButton:LibraryButton = new LibraryButton();
myButton.x = 450; // 設定X座標
myButton.y = 100; // 設定Y座標
addChild(myButton); // 加入場景
用“影片片段”和“按鈕”兩種元件製作按鈕不同的地方
按鈕元件的影格裡面可以直接設定四種按鈕狀態的圖示
Up(原始狀態), Over(滑鼠移入), Down(按下滑鼠), Hit( 點擊範圍)
((圖22..44)) 按鈕元件的時間軸影
格
(圖22..55)) 按鈕四種狀態
- 15. 替按鈕元件加入事件監聽器
// 先指定要監聽的事件類型是MouseEvent.CLICK
// 再指定事件發生時要執行的函式clickLibraryButton
myButton.addEventListener(MouseEvent.CLICK,
clickLibraryButton);
// 定義執行函式要做的事情
function clickLibraryButton(event:MouseEvent)
{
// 只輸出一段文字就好…
trace(“You clicked the Library button!”);
}
- 16. 繪製圖形-- DDrraawwiinnggSShhaappeess..ffllaa
除了使用元件庫裡面的元件之外
也可以使用基本的線條和圖形繪圖
使用 ggrraapphhiiccss物件設定繪圖屬性
// 設定線條樣式,線寬2,顏色為黑色
// 注意顏色的表示方法為16進位(0,1,2,…,9,A,B,C,D,E,F)
// 頭兩個0x不看剩餘RGB各用兩個數字代表
this.graphics.lineStyle(2,0x000000);
// 開始繪圖,劃一條線,起點(100,200)
this.graphics.moveTo(100,200);
// 畫到(150,250的位置)
this.graphics.lineTo(150,250);
(加分小問題) 請問16進位的色彩表示法當中,紅綠藍三色要怎麼
寫?
- 18. 繪製文字 -- DDrraawwiinnggTTeexxtt..ffllaa
使用TTeexxttFFiieelldd類別產生文字
// 產生TextField物件
var myText:TextField = new TextField();
// 使用text屬性設定文字內容
myText.text = “Check it out!”;
// 設定位置
myText.x = 50;
myText.y = 50;
// 設定寬度和高度
myText.width = 200;
myText.height = 30;
// 設定是否顯示邊框
myText.border = true;
// 設定文字是否可以選取,false為不可選取
myText.selectable = false;
// 還是要記得把文字加入場景當中
addChild(myText);
- 19. 設定文字式樣
// 宣告TextFormat物件
var myFormat:TextFormat = new TextFormat();
// 使用font屬性來設定字型
myFormat.font = “Arial”;
// 使用size屬性設定字體大小
myFormat.size = 24;
// 是否為粗體, true代表使用
myFormat.bold = true;
設定完文字式樣之後,要連結到文字物件
// 把myText的預設文字式樣設定為myFormat
myText.defaultTextFormat = myFormat;
((圖22..99)) 設定完文字式樣的效
果
- 21. 接受玩家的輸入
(page-55)
滑鼠輸入 -- MMoouusseeIInnppuutt..ffllaa
mouseX和mouseY代表現在滑鼠座標
// 加入事件監聽器, ENTER_FRAME一進入影格就觸發
addEventListener(Event.ENTER_FRAME, showMouseLoc);
// 觸發ENTER_FRAME事件時執行的函式
// 因為只有一個影格, 所以以下的函式會一直在執行
function showMouseLoc(event:Event)
{
// 把滑鼠座標顯示在mouseLocText文字
mouseLocText.text = “X=”+mouseX+” Y=”+mouseY;
}
- 22. 滑鼠移入影片片段的效果
// 加入事件監聽器, MouseEvent.ROLL_OVER代表滑鼠移
入m
ySprite.addEventListener(MouseEvent.ROLL_OVER,
rolloverSprite);
// 滑鼠移入時,影片片段透明度設為1, 為完全不透明
function rolloverSprite(event:MouseEvent)
{
mySprite.alpha = 1;
}
滑鼠移出影片片段的效果
// 和上面類似的寫法, 事件改為ROLL_OUT
mySprite.addEventListener(MouseEvent.ROLL_OUT,
rolloutSprite);
function rolloutSprite(event:MouseEvent)
{
// 透明度變為50%
mySprite.alpha = .5;
}
- 23. 鍵盤輸入 -- KKeeyybbooaarrddIInnppuutt..ffllaa
按下按鍵效果
// 事件監聽器監控KEY_DOWN
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownFunction);
// 按下按鍵執行下列事情
function keyDownFunction(event:KeyboardEvent)
{
// event.charCode代表按下的按鍵編碼
// 使用內建函式將按鍵碼轉為文字
keyboardText.text = “Key Pressed: +String.fromCharCode(event.charCode);
}
(加分小問題) 請問英文字母A~Z的按鍵碼範圍是多少?
- 25. 在放開按鍵時,監控空白鍵是否放開
// 使用KEY_UP
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpFunction);
// 觸發KEY_UP事件時執行下列函式
function keyUpFunction(event:KeyboardEvent)
{
// 假如是放開空白鍵
if (event.charCode == 32)
{
// 這個變數設為false
spacebarPressed = false;
}
}
- 26. 文字輸入 -- TTeexxttIInnppuutt..ffllaa
讓使用者可以在文字欄位輸入文字
// 一樣宣告一個文字物件
var myInput:TextField = new TextField();
// 使用type屬性來指定可以輸入文字
myInput.type = TextFieldType.INPUT;
// 一樣把這個文字加到場景
addChild(myInput);
- 27. 更詳細的程式碼
// 宣告文字格式
var inputFormat:TextFormat = new TextFormat();
inputFormat.font = “Arial”;
inputFormat.size = 12;
// 宣告文字
var myInput:TextField = new TextField();
// 設定文字為可以輸入
myInput.type = TextFieldType.INPUT;
// 設定文字格式
myInput.defaultTextFormat = inputFormat;
// 設定位置
myInput.x = 10;
myInput.y = 10;
// 設定尺寸
myInput.height = 18;
myInput.width = 200;
// 設定邊框
myInput.border = true;
// 文字加入場景
addChild(myInput);
// 設定目前的輸入焦點在myInput
stage.focus = myInput;
- 28. 最後修改成按下 ““ EENNTTEERR””鍵文字會消失
(確定輸入完畢的意思……))
// 事件監聽器監視KEY_UP
myInput.addEventListener(KeyboardEvent.KEY_UP, checkForReturn);
// 下列函式檢查是否有按下ENTER鍵
function checkForReturn(event:KeyboardEvent)
{
// ENTER的按鍵碼是13
if (event.charCode == 13)
{
// 按下ENTER後執行下列函式
acceptInput();
}
}
// 按下ENTER實際上要做的事情
function acceptInput()
{
// 把輸入的文字存到theInputText
var theInputText:String = myInput.text;
// 把theInputText儲存的內容印出來
trace(theInputText);
// 把文字從場景中移除
removeChild(myInput);
}
- 29. 產生動畫
(page-59)
影片片段的移動 -- SSpprriitteeMMoovveemmeenntt..ffllaa
以影格為基礎的動畫((ffrraammee--bbaasseedd aanniimmaattiioonn))
改變XX座標或YY座標
以固定的速率移動
使用EENNTTEERR__FFRRAAMMEE事件
以時間為基礎的動畫((ttiimmee--bbaasseedd aanniimmaattiioonn))
稍後會看到……
((英文小提示))
ssoommeetthhiinngg--bbaasseedd……
以某某東西為基礎的……
- 30. 程式碼範例
// 元件庫內已有Hero影片片段
// 新增一個Hero類別的物件
var hero:Hero = new Hero();
hero.x = 50; // 設定位置
hero.y = 100;
addChild(hero); // 物件加入場景
// 加入ENTER_FRAME事件監聽器
// 遇到ENTER_FRAME時執行animateHero() 這個函式
addEventListener(Event.ENTER_FRAME, animateHero);
// 定義函式內要做的事情
function animateHero(event:Event)
{
hero.x++; // 每次把hero的位置往右加1像素
}
- 31. 使用EENNTTEERR__FFRRAAMMEE事件製作動畫
物件移動的速度和影格速率有關
預設1122 ffppss
-->> 每秒跑1122格
-->> 1122次EENNTTEERR__FFRRAAMMEE事件
-->> 執行1122次aanniimmaatteeHHeerroo(())函式
-->> 元件往右移動1122次((每次11像素))
如果要加快播放速度,,增加影格速率,,例如6600ffppss
預期每秒執行6600次……但是會和電腦效能有關
以影格為基礎的動畫
簡單易用但是不穩定
電腦速度很慢的話,,無法達到預期的播放速度
- 32. 進一步的修改,,讓hheerroo走路
hheerroo內有88個影格
影格11裡面ssttoopp(())停止動作 –– 站立狀態
影格22~~88 –– 走路循環動畫
function animateHero(event:Event)
{
hero.x += 7; // 一樣向右移動,每次7像素
// 如果現在播放到影格8
if (hero.currentFrame == 8)
hero.gotoAndStop(2); // 回到影格2
else
// 往後播放一個影格
hero.gotoAndStop(hero.currentFrame+1);
}
((圖22..1144)) 用77個影格完成走路的
動作
- 33. 使用計時器((TTiimmeerr)) –– UUssiinnggTTiimmeerrss..ffllaa
可以把ttiimmeerr想成-->>會送出訊息的時鐘
產生時鐘、開始執行、開始計時、每隔一段時間送出訊息
例如::讓某個函式每秒執行一次
使用TTiimmeerr物件產生計時器
計時器可以設定編號((可有多個計時器同時執行))
指定編號停止計時器
用毫秒((千分之一秒))為單位指定時間
11000000 mmiilllliisseeccoonnddss == 11 秒
// 使用Timer物件產生計時器,指定多久執行一次,1000毫秒=1秒
var myTimer:Timer = new Timer(1000);
// 替Timer加入事件監聽器, 定期(1000毫秒)執行timeFunction一次
myTimer.addEventListener(TimerEvent.TIMER, timerFunction);
// 觸發事件時實際執行的函式
function timerFunction(event:TimerEvent)
{
// 設定繪圖顏色
this.graphics.beginFill(0x000000);
// 每次在畫面上畫一個小圓,位置每次向右位移10
// 其他細節用google自己查
this.graphics.drawCircle(event.target.currentCount*10,100,4);
}
myTimer.start(); // 開始執行Timer(沒有這行,Timer不會執行)
- 34. 將TTiimmeerr套入動畫 –– UUssiinnggTTiimmeerrss22..ffllaa
和前面eenntteerrFFrraammee事件的例子類似
修改事件監聽器的程式
一樣定期執行aanniimmaatteeHHeerroo(())函式
// 替動畫角色產生一個Timer,80毫秒執行一次
var heroTimer:Timer = new Timer(80);
// 加入事件監聽器,定時執行animateHero() 函式
heroTimer.addEventListener(TimerEvent.TIMER,
animateHero);
heroTimer.start(); // Timer開始跑
其餘程式碼相同
不管影格速率多少((66,,1122,,6600……))
動畫執行大致速度相同
速度慢的電腦就不一定相同
- 35. 注意!!這邊的概念會有點難懂……
以時間為基礎的動畫 –– TTiimmeeBaasseeddAAnniimmaattiioonn..ffllaa
動畫步驟根據經過的時間來進行
計算步驟之間的時間
根據時間差來移動物體
移動距離 == 物體速度 xx 經過時間
首先用變數((整數型態))來儲存經過的時間
//// ggeettTTiimmeerr(())傳回FFllaasshh ppllaayyeerr開始播放到現在的時間((單位是毫秒))
var lastTime:int = getTimer();
再加入事件監聽器
//// 監聽EENNTTEERR__FFRRAAMMEE事件,,觸發執行aanniimmaatteeBaallll(())函式
addEventListener(Event.ENTER_FRAME, animateBall);
- 36. 處理物體移動的函式
function animateBall(event:Event)
{
// 計算經過的時間
// getTimer()抓現在的時間
// lastTime是上次存起來的時間
// 兩個相減代表現在和上一步的時間差
var timeDiff:int = getTimer()-lastTime;
// 把時間差累加到lastTime,在下一步使用
lastTime += timeDiff;
// 物體距離 = 時間差 * 速度(0.1),
// 速度0.1代表每毫秒移動0.1像素,一秒移動100像素
ball.x += timeDiff*.1;
}
測試一下效果,影格速率12和60有何不同?
物體移動距離一樣,影格速率60跑的比較順暢
- 37. 以物理為基礎的動畫 –– PPhhyyssiiccssBaasseeddAAnniimmaattiioonn..ffllaa
增加物理屬性
模擬真實世界的動畫效果
真實重力加速度:: 99..88 ((公尺平方//秒))
var gravity:Number = .00098; // 設定重力加速度
var dx:Number = .2; // 設定X方向速度
var dy:Number = -.8; // 設定Y方向速度
// 設定開始時間
var lastTime:int = getTimer();
// 監聽ENTER_FRAME事件,執行animateBall()函式
addEventListener(Event.ENTER_FRAME, animateBall);
((圖22..1155)) 影格速率1122的動畫
效果
- 38. 定義移動動畫函式
function animateBall(event:Event)
{
// 計算時間差
var timeDiff:int = getTimer()-lastTime;
// 累加經過時間
lastTime += timeDiff;
// 根據重力加速度修改Y方向速度
// 速度 = 加速度 x 時間
dy += gravity*timeDiff;
// 距離 = 速度 x 時間
// 計算完的距離累加原本的位移
ball.x += timeDiff*dx;
ball.y += timeDiff*dy;
}
- 39. 撰寫使用者互動程式
(page-65)
移動圖形::MMoovviinnggSSpprriitteess..ffllaa
使用方向鍵控制動畫移動方向
先使用Boooolleeaann變數儲存按鍵狀態((尚未按下::
ffaallssee))
var leftArrow:Boolean = false;
var rightArrow:Boolean = false;
var upArrow:Boolean = false;
var downArrow:Boolean = false;
((圖22..1166)) 方向鍵與按鍵
編碼
- 40. 替按鍵加入事件監聽器
// 按下按鍵的事件監聽器
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedDown);
// 放開按鍵的事件監聽器
stage.addEventListener(KeyboardEvent.KEY_UP, keyPressedUp);
// ENTER_FRAME事件監聽器
stage.addEventListener(Event.ENTER_FRAME, moveMascot);
// 觸發按下按鍵事件,實際執行的函式
function keyPressedDown(event:KeyboardEvent)
{
// 按下對應的按鍵,把按鍵狀態變數設為true
if (event.keyCode == 37)
leftArrow = true;
else if (event.keyCode == 39)
rightArrow = true;
else if (event.keyCode == 38)
upArrow = true;
else if (event.keyCode == 40)
downArrow = true;
}
- 41. 觸發放開按鍵事件, 實際執行的函式
function keyPressedUp(event:KeyboardEvent)
{
// 對應按鍵將狀態變數設為true
if (event.keyCode == 37)
leftArrow = false;
else if (event.keyCode == 39)
rightArrow = false;
else if (event.keyCode == 38)
upArrow = false;
else if (event.keyCode == 40)
downArrow = false;
}
- 42. 觸發ENTER_FRAME 事件, 移動位置產生動畫
function moveMascot(event:Event)
{
var speed:Number = 5; // 設定速度
// 注意以下的判斷式寫法是每個獨立的if判斷,不是if…
else if
// 代表以下四個狀態可以同時執行
// 對應方向鍵移動X或Y方向
if (leftArrow)
mascot.x -= speed;
if (rightArrow)
mascot.x += speed;
if (upArrow)
mascot.y -= speed;
if (downArrow)
mascot.y += speed;
}
- 43. 拖拉圖形::DDrraaggggiinnggSSpprriitteess..ffllaa
使用滑鼠點擊拖拉圖形
加入滑鼠事件監聽器
// 替影片片段加入按下滑鼠事件監聽器
mmaassccoott..aaddddEEvveennttLLiisstteenneerr((MMoouusseeEEvveenntt..MMOOUUSSEE__DDOOWWNN,,
ssttaarrttMMaassccoottDDrraagg));;
// 替場景加入放開滑鼠事件監聽器
ssttaaggee..aaddddEEvveennttLLiisstteenneerr((MMoouusseeEEvveenntt..MMOOUUSSEE__UUPP,,
ssttooppMMaassccoottDDrraagg));;
// 替影片片段加入ENTER_FRAME事件監聽器
mmaassccoott..aaddddEEvveennttLLiisstteenneerr((EEvveenntt..EENNTTEERR__FFRRAAMMEE,,
ddrraaggMMaassccoott));;
- 44. 處理滑鼠拖拉距離
紀錄按下滑鼠的位置
// 使用內建Point類別紀錄座標, 預設還未儲存座標
var clickOffset:Point = null;
// 觸發按下滑鼠事件的函式
function startMascotDrag(event:MouseEvent)
{
// 把觸發事件當時的座標儲存到clickOffset
clickOffset = new Point(event.localX, event.localY);
}
// 觸發放開滑鼠事件執行的函式
function stopMascotDrag(event:MouseEvent)
{
// 放開滑鼠後清除之前儲存的按下位置
clickOffset = null;
}
- 45. // ENTER_FRAME事件觸發的函式
function dragMascot(event:Event)
{
// 如果已經有紀錄滑鼠按下位置
if (clickOffset != null)
{
// 計算現在滑鼠位置和儲存位置的距離差
mascot.x = mouseX - clickOffset.x;
mascot.y = mouseY - clickOffset.y;
}
}
- 46. 碰撞檢測::CCoolllliissiioonnDDeetteeccttiioonn..ffllaa
遊戲內的物件常需要檢查是否有碰撞
兩種用法::
hhiittTTeessttPPooiinntt(()) 檢查某個點座標是否有碰撞物體
hhiittTTeessttOObbjjeecctt(()) 碰撞兩個物件是否有碰撞
// 測試上列兩個函式的用法
// 加入ENTER_FRAME事件監聽器
addEventListener(Event.ENTER_FRAME, checkCollision);
// 實際處理在觸發ENTER_FRAME事件的函式
function checkCollision(event:Event)
{
// 判斷現在的滑鼠座標是否有碰到影片片段
// 這個用法比較少用
if (crescent.hitTestPoint(mouseX, mouseY, true))
messageText1.text = “hitTestPoint: YES”;
else
messageText1.text = “hitTestPoint: NO”;
- 47. // 根據滑鼠位置移動star影片片段
star.x = mouseX;
star.y = mouseY;
// 判斷兩個影片片段是否有碰撞
if (star.hitTestObject(crescent))
messageText2.text = “hitTestObject: YES”;
else
messageText2.text = “hitTestObject: NO”;
}
- 48. 存取外部資料
(page-69)
有時需要存取遊戲外部的資料,,例如……
從網頁或文字欄位載入遊戲參數
在本機端((自己的電腦))儲存或載入資訊
使用外部變數::
EExxtteerrnnaallVVaarriiaabblleess..hhttmmll
EExxtteerrnnaallVVaarriiaabblleess..ffllaa
AACC__RRuunnAAccttiivveeCCoonntteenntt..jjss
遊戲進行時會因為某些選項改變,,例如……
拼圖遊戲會使用不同的圖片
機台遊戲用不同的速度進行
- 49. 注意:: 資料夾內必須要有AACC__RRuunnAAccttiivveeCCoonntteenntt..jjss
可以藉由HHTTMMLL網頁傳遞變數值給ffllaasshh影片
AACC__FFLL__RRuunnCCoonntteenntt(())函式
ffllaasshhvvaarrss:: FFllaasshh變數
<script language=”javascript”>
// javascript開始
AC_FL_RunContent(
‘codebase’,
‘http://download.macromedia.com/pub/shockwave/cabs/flash/swfl
ash.cab#version=9,0,0,0’, // flash安裝檔網址
‘width’, ‘550’, // flash影片寬度
‘height’, ‘400’, // flash影片高度
‘src’, ‘ExternalVariables’, // flash影片名稱
‘quality’, ‘high’, // flash影片品質
‘flashvars’, ‘puzzleFile=myfilename.jpg&difficultyLevel=7’
);
// javascript結束
</script>
- 50. ffllaasshhvvaarr的格式
變數名稱 == 變數值
用““ &&””符號區隔
所以HTML內這行的意思…
puzzleFile=myfilename.jpg&difficultyLevel=7
兩個變數: puzzleFile, difficultyLevel
變數值為: myfilename.jpg, 7
- 51. FFllaasshh裡面存取方式
參數儲存在下列物件
var paramObj:Object =
LoaderInfo(this.root.loaderInfo).parameters;
分開存取paramObj內的變數
var diffLevel:String = paramObj[“difficultyLevel”];
可以用上述方式傳遞遊戲參數,例如…
圖片名稱, 開始關卡, 速度, 位置…
- 52. 載入XXMMLL資料用法::
LLooaaddiinnggDDaattaa..ffllaa
LLooaaddiinnggDDaattaa..xxmmll
結合XXMMLL文字檔儲存資料,,格式可自訂
<LoadingData>
<question>
<text>This is a test</text>
<answers>
<answer type=”correct”>Correct answer</answer>
<answer type=”wrong”>Incorrect answer</answer>
</answers>
</question>
</LoadingData>
XML格式是以標籤自訂資料結構,以這樣的形式
<tag>…</tag>
標籤可設定屬性
- 53. 讀取XXMMLL檔案在FFllaasshh內需要兩個物件
UURRLLRReeqquueesstt
UURRLLLLooaaddeerr
加入事件監聽器,,當載入動作完成時執行函式
// 使用URLRequest設定XML的載入路徑(可以是網址)
var xmlURL:URLRequest = new URLRequest(“LoadingData.xml”);
// 使用URLLoader物件載入XML資料,並指定讀取網址
var xmlLoader:URLLoader = new URLLoader(xmlURL);
// 加入載入完成事件監聽器
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
載入完成後執行下列函式
function xmlLoaded(event:Event)
{
// 將載入的資料存入區域物件dataXML
var dataXML = XML(event.target.data);
// 以下為存取XML資料的用法
trace(dataXML.question.text);
trace(dataXML.question.answers.answer[0]);
// 存取type屬性
trace(dataXML.question.answers.answer[0].@type);
}
- 54. 使用SShhaarreeOObbjjeeccttss儲存區域變數
SavingLocalData.fla
可用來儲存像玩家分數,,遊戲設定
使用下列用法……
// 宣告SharedObject物件,名稱為myLocalData
// 再使用getLocal()函式設定變數mygamedata
var myLocalData:SharedObject =
SharedObject.getLocal(“mygamedata”);
// 把字串內容儲存到SharedObject的gameinfo變數
myLocalData.data.gameinfo = “Store this.”;
// 測試是否有儲存成功
trace(“Found Data: “+myLocalData.data.gameinfo);
- 55. 各式各樣的遊戲元素
(page-72)
以下內省略,,有興趣同學自己研讀,,包括……
自訂鼠標
播放聲音
載入畫面
產生亂數
將陣列內容洗牌((類似像樸克牌))
顯示時鐘時間
系統設定資料
遊戲作弊與安全性問題