康亞明 KANG Ya-ming
(榆林學(xué)院信息工程學(xué)院,榆林 719000)
(School of Information Engineering,Yulin University,Yulin 719000,China)
隨著Internet的發(fā)展,網(wǎng)絡(luò)上Flash游戲隨處可見(jiàn),比如益智類、動(dòng)作類、體育類、棋牌類、射擊類等,它已成為主流的在線游戲?;贔lash平臺(tái)的游戲不但容量小、極易在網(wǎng)絡(luò)上傳播,而且利用ActionScript強(qiáng)大的功能可以制作出細(xì)膩、可玩性強(qiáng)的游戲[1-2]。但是目前Flash游戲制作同樣存在著一些問(wèn)題,例如ActionScript代碼分散在Flash影片剪輯和時(shí)間軸上,導(dǎo)致代碼的維護(hù)困難,也很難重用;沒(méi)有一個(gè)清晰簡(jiǎn)單的流程,增加了游戲開(kāi)發(fā)的復(fù)雜度。建立一些通用的基本框架,可以大大提高游戲開(kāi)發(fā)的效率,增強(qiáng)代碼的可讀性。
ActionScript是Flash內(nèi)置的腳本語(yǔ)言,與JavaScript相似,它是一種面向?qū)ο蟮木幊陶Z(yǔ)言,可以使用ActionScript控制Flash中的對(duì)象,創(chuàng)建向?qū)Ш徒换ピ兀部梢詳U(kuò)展Flash,使Flash表現(xiàn)出強(qiáng)大的交互性,用戶不僅僅能觀看動(dòng)畫,還能參與到動(dòng)畫中[3-6]。
框架(Framework)是整個(gè)或部分系統(tǒng)的可重用設(shè)計(jì),表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法[7],我們可以把游戲基本框架的主要結(jié)構(gòu)分為狀態(tài)循環(huán)、游戲頻率和事件模型三個(gè)部分。
1.1 游戲的狀態(tài)循環(huán) 我們的游戲大概有三個(gè)狀態(tài),一個(gè)是初始狀態(tài),一個(gè)是游戲狀態(tài),還有一個(gè)是游戲結(jié)束的狀態(tài)。根據(jù)游戲運(yùn)行的需要來(lái)確定它的當(dāng)前運(yùn)行狀態(tài),這個(gè)就是狀態(tài)循環(huán)。比如,在游戲狀態(tài),需要等待玩家點(diǎn)擊按鈕,當(dāng)按鈕被按下的時(shí)俳,游戲狀態(tài)轉(zhuǎn)變?yōu)榻Y(jié)束狀態(tài)。狀態(tài)循環(huán)是游戲行為控制的交警。一個(gè)非?;镜氖褂梅绞骄褪鞘褂贸A亢蚐witch方法。下面的代碼建立了幾個(gè)類中用到的狀態(tài),這些狀態(tài)會(huì)控制游戲的流程。我們用const關(guān)鍵字來(lái)聲明它們,而且他們是一種靜態(tài)常量,可以在不用建立實(shí)例的情況下被其他類調(diào)用。
public static const STATE_INIT:int=10;
public static const STATE_PLAY:int=20;
public static const STATE_OVER:int=30;
public var gameState:int=0;//建立一個(gè)變量來(lái)保存當(dāng)前游戲保持的狀態(tài)。
下面通過(guò)Switch方法來(lái)決定當(dāng)前游戲應(yīng)該保持哪一種狀態(tài)。
public funtion gameloop(e:EVENT){//gameloop是游戲的主要循環(huán),它表示了游戲的頻率(后面說(shuō)明)。
1.2 游戲頻率 狀態(tài)循環(huán)不斷地檢測(cè)現(xiàn)在游戲進(jìn)行到哪一環(huán)節(jié),根據(jù)環(huán)節(jié)的不同來(lái)采取恰當(dāng)?shù)男袨?。這種每隔一段時(shí)間來(lái)檢查游戲狀態(tài)的機(jī)制被稱作游戲頻率,我們可以通過(guò)ENTER_FRAME事件或Timer類(這里以ENTER_FRAME事件為例)來(lái)反復(fù)的調(diào)用gameLoop()函數(shù),代碼如下:
1.3 事件模型 事件驅(qū)動(dòng)是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特征之一,我們可以使用系統(tǒng)事件(如鼠標(biāo)和鍵盤事件等)和自定義的事件來(lái)驅(qū)動(dòng)游戲。如下面代碼就是給舞臺(tái)注冊(cè)了一個(gè)鼠標(biāo)單擊事件處理器。
其中第一個(gè)參數(shù)是事件的名稱。然后第二個(gè)參數(shù)是事件觸發(fā)后要調(diào)用的函數(shù)名稱。
2.1 游戲名稱及功能描述 游戲名稱叫戳氣球,氣球從屏幕上方往下掉,玩家使用鼠標(biāo)控制一個(gè)旋轉(zhuǎn)的切刀去戳破氣球,如果玩家漏掉5個(gè)氣球,游戲?qū)⒔Y(jié)束。否則游戲隨著氣球被戳破玩家將得分,得分到一定數(shù)將晉級(jí),氣球隨著等級(jí)提高,產(chǎn)生的數(shù)量越來(lái)越多,掉落的速度越來(lái)越快。
2.2 戲素材準(zhǔn)備
圖片素材:氣球和切刀;
聲音素材:氣球破裂的爆炸聲。
2.3 基于本文所述框架的游戲?qū)崿F(xiàn)(使用flash cs5.5)
2.3.1 打開(kāi)flash,將氣球、切刀和聲音導(dǎo)入后做成元件以備使用,元件名和AS鏈接類名均為qiqiu、qiedao和bzh。
2.3.2 創(chuàng)建Game.as文檔類(下為主要代碼)
本文描述了一種基于ActionScript3.0的游戲設(shè)計(jì)框架,主要利用元件和文檔類來(lái)完成。充分地發(fā)揮了腳本的作用,此框架不僅使開(kāi)發(fā)流程更加清晰簡(jiǎn)單,也提高了程序的可重用性和可維護(hù)性,從而提高開(kāi)發(fā)效率。該框架有很大的靈活性,在各個(gè)部分可以根據(jù)項(xiàng)目的實(shí)際需要進(jìn)行相應(yīng)的擴(kuò)充變更。
[1]GaryRosenzweig.ActionScript3.0 GameProgramming University[M].QUE Publishing,2007.
[2][美]LottJ,Reinhardt R.Flash 8 ActionScript寶典[M].北京:電子工業(yè)出版社,2006.
[3]Colin Moock.ActionScript 3.0編程精髓[M].北京:機(jī)械工業(yè)出版社,2008.
[4]李松,鐘垣.Flash數(shù)據(jù)庫(kù)動(dòng)態(tài)開(kāi)發(fā)專業(yè)教程[M].北京:清華大學(xué)出版社,2004.
[5]莫治雄,等.閃客家園FlashMX網(wǎng)上動(dòng)畫制作指南[M].北京:希望電子出版社,2006.
[6]姚磊岳,等.基于Flash技術(shù)動(dòng)態(tài)富媒體應(yīng)用程序的研究與實(shí)現(xiàn)[J].江西藍(lán)天學(xué)院學(xué)報(bào),2006(3):68-71.
[7]http://baike.so.com/doc/1863840.html.