Skip to main content

Posts

Showing posts from June, 2007

打打打爆小人頭!! 我的第一個FL1.1小遊戲 part 5

3. 主遊戲的Key controler:

當畫面進入pause狀態時,需要將pause按紐改成replay,所以這邊把pause按紐作成一個擁有兩格frame的MovieClip,並命名成"pause_btn"

正如前面所說,Erin習慣將Key event統一控管,接下來主遊戲所有的key control都會寫在畫面外的Key controler按紐身上。

LSK and RSK action:
on (keyPress "") {
//LSK
if (pause_btn._currentframe == 1) {
call("/timerFunc:pause");
//當pause_btn為"pause"時,呼叫遊戲暫停
tellTarget ("/pause_btn") {
gotoAndStop(2);
}
} else {
call("/timerFunc:replay");
tellTarget ("/pause_btn") {
gotoAndStop(1);
}
}
}
on (keyPress "") {
//RSK
gotoAndStop("home");
}

數字鍵1-9 action:
on (keyPress "1") {
timerFunc.hitNum = 1;
//告知timerFunc 哪個數字被按下
call("/timerFunc:beHit");
//判斷小人頭有無被打
}
on (keyPress "2") {
timerFunc.hitNum = 2;
call("/timerFunc:beHit");
}
//以下以此類推請寫到9為止

再將其他小部份處理一下,如back鍵程式、score與time數字重置,這樣遊戲就完成囉!

下載最後完成檔,看看與你最後完成的樣子有什麼差別?

~End~

Edit 6/20: 由於Erin並沒有特別去除蟲,如果這個遊戲有bug產生,請大家試著去抓蟲,如果你發現了修改方法可以直接post…

打打打爆小人頭!! 我的第一個FL1.1小遊戲 part 4

2. 計時器與重覆使用的程式:
FL1.1的Call(frame label):
Flash 4沒有function寫法,只有frame action,要重複利用的code是寫在一個無關的frame上,利用它的frame label來執行Call(frame label)指令模擬function。所以接下來主遊戲程式使用到的重複code,都將寫在一個timerFunc MovieClip中。

"timerFunc" MovieClip:
[圖10] 時間軸上配置,前三格為計時器程式後面留給Call()使用(善用空間..=P)

Frame 1:
timer = getTimer();
//getTimer()重出江湖嚕!^^,先抓取timer起始值

Frame 2:
if ((getTimer()-timer)>=1000) {
//當getTimer抓到一秒時,就回到frame1重新抓起始值;
if (_root.sec<=0) {
tellTarget ("/") {
gotoAndStop("end");
//遊戲結束
}
_root.end_txt = "You got total\n" add _root.score add " heads!!";
//string相加一定要使用add代替+
call("pause");
//將動畫停止
stop();
} else {
_root.sec--;
//減秒
gotoAndPlay(1);
}
}

Frame 3:
gotoAndPlay(2);
//不滿一秒就是重複回到frame 2

這樣一個簡單的計時器程式就完成了~~
接下來處理重複利用的程式:

Frame label 「beHit」: 判斷小人頭有無被打,會傳入hitNum告知被打號碼
myName = "head_mc_" add hitNum;
if (_root[myName].isActive) {
tellTarget ("/" add myName) {
gotoAndPlay("beHit");

打打打爆小人頭!! 我的第一個FL1.1小遊戲 part 3

請先下載範例檔 (範例檔內只有少數的程式,其餘請參照教學補貼上去,版權所有,僅供個人學習行為使用)

首頁key event程式:

開始撰寫FL1.1程式前,請先將你的Flash 4書拿出來溫習一下,FL1.1 content只能使用Flash 4的寫法與Flash 5屬性用法喲!(請參考tellTarget與點語法的使用時機)

首頁上list menu命名為:menu,內有三個frames。

Key controler上的程式:
on (keyPress "") {
menu.num = menu._currentframe;
if (menu.num == 1) {
menu.num = 3;
} else {
menu.num--;
}
tellTarget ("/menu") {
gotoAndStop(num);
}
}
on (keyPress "") {
menu.num = menu._currentframe;
if (menu.num == 3) {
menu.num = 1;
} else {
menu.num++;
}
tellTarget ("/menu") {
gotoAndStop(num);
}
}
on (keyPress "") {
if (menu._currentframe == 1) {
gotoAndStop("game");
} else if (menu._currentframe == 2) {
gotoAndStop("credit");
} else {
fscommand2("Quit");
}
}
重點是利用 _currentframe這個屬性來判斷上下跳選項喲!


主遊戲程式:

畫面上九個小人頭MovieClip分別命名成:head_mc_[1-9]
1. 小人頭出沒控制器:由一個擁有三個frames的MovieClip來製作,這是Flash4中最常用的模擬onEnterFrame寫法...要善用時間軸喔!

headsControler:
frame1:
num = random(10)+5;
//簡單的亂數控制小人頭出沒間隔,數字越小越快也越容易出現bug...XD 哈,因為要考慮到小人頭動畫的時間


frame2:
if (nu…

打打打爆小人頭!! 我的第一個FL1.1小遊戲 part 2

Wac-A-Mole!!遊戲流程圖:

[圖4] 首頁

[圖5] 作者介紹

[圖6] 遊戲畫面,小人頭對應數字鍵1-9,RSK對應退出按鈕,讓user可以在遊戲中直接回到首頁,手機遊戲應該是很隨性的,所以在LSK加上使遊戲暫停的按鈕。

[圖7] 遊戲結束畫面

遊戲元件製作:

FL1.1 content做法非常原始,需要將所需元件一一擺到stage上才能控制,所以為frame加上label是很重要的一個步驟。

[圖8] 原始檔主時間軸上配置

小人頭MovieClip的製作:

為了簡化暫停遊戲時程式的控制,所以在製作小人頭動畫時將所有的狀態全部作在同一時間軸上。
Tip: 有時候善加利用Graphic可以簡化MovieClip的階層數,別將MovieClip作成像俄羅斯娃娃一層MC包一層MC包了一大坨,這樣要動畫一次停下來需要控制很多層級,也會增加很多無謂的程式撰寫。

[圖9] 小人頭動畫時間軸上配置

小人頭MovieClip內時間軸程式:
frame 1:
stop();

frame label 「active」: 小人頭可以被打爆的區段
isActive=true;

frame 18: (label "active"最後一格)
gotoAndStop(1);
isActive=false;
//回到frame1停止小人頭

frame label 「beHit」:
isActive=false;

frame 23: (last frame)
gotoAndStop(1);

Key event統一控管:

雖然可以將Key event寫在各自按鈕身上,但是在同一個frame上所有的Key Event利用一個按鈕統一管理會讓除蟲難度變低,所以一直都是Erin最喜歡的Key event管理方式,接下來開始主遊戲程式製作囉!

下回會直接release可供製作的原始檔,這樣大家就可以與Erin一起完成這個遊戲嚕!

to be continued....

打打打爆小人頭!! 我的第一個FL1.1小遊戲 part 1

平台:Nokia S60 176x208(以下簡稱Flash lite為FL) 雖然FL2.x已經推出一段時間,仍然有許多上市手機僅支援FL1.1,本篇教學重點是FL1.1 Key event控制、遊戲流程與Flash4、Flash5語法大融合,所以拿出最簡單的打地鼠遊戲當作第一篇教學主題,希望有心學習FL1.1的新手能因為本篇分享而有所收穫。

由於FL1.1 與FL2.x 語法不盡相同,接下來的分享中,並不會花太多時間講解兩者之間的差別。

一般手機user很容易因為畫面上按鈕出現的位置而直覺性點選離按鈕最近的手機按鍵,為了避免user操作困擾,按鈕位置擺放須要有一定的規則。

[圖1] Erin的第一個FL1.1 game ,start按鈕位置設計上就有很大的失誤,由於按鈕位置偏右下角,很多user會直接點選手機螢幕右邊那顆soft key (以下簡稱RSK)進入遊戲,其實action是寫在中間Enter鍵上(以下簡稱CSK)...QQ 大失誤!! (但仍然保留作為UI設計失敗範本!^^)

[圖2] 按鈕位置明顯告知點選CSK進入遊戲

[圖3] list menu型態的遊戲首頁,點選上下鍵後按CSK進入

Tip: RSK通常用於「back」、「exit」,所以在遊戲中,應該儘量別賦予RSK不同於離開的意義。

to be continued...