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