五、實現爆炸效果、並加入道具導彈
大多數游戲都有著豐富的效果類,在精靈移動類游戲中曾一度以此為一個重要的賣點,。光光是一些豐富的特效是不能夠產生一個好的游戲的,但是一個好的游戲是萬萬不能缺少好的效果的。
很多人認為游戲的效果層有時和跟游戲邏輯本身並沒有太大的關系,往往就是在最終屏幕上再畫上一層效果層。但是游戲邏輯和效果層之間的通信是很重要的。這種通信往往體現在延時與等待上。比如飛機爆炸時,不接受任何用戶輸入,並且爆炸效果還要繼續跟隨飛機墜落,甚至爆炸的范圍會影響周圍的物體,要等待爆炸結果結束了才繼續進行游戲。游戲邏輯和效果層之間的通信是很復雜的問題。在這裡我突然有了罪惡感,我們沒有對游戲進行任何的分析就起步了,游戲完全是基於硬編碼的,我想到那兒,大家跟著看到那兒。飛機類僅僅是一個sprite,沒有設計成一個狀態機,這也就使得我們的效果層和邏輯層的通信有些卡通了。也許本文給了你編寫自己第一個游戲的喜悅,也帶給了你對游戲擴展性與復雜性的一絲擔憂。或許這比便一個硬編碼的游戲更有意義呢?誰說得好呢,現還是以為那些擴展性良好的游戲是偉大游戲構架師的傑作吧,相信你有了一兩個好的想法後會重新設計這個游戲的,使之稍微有一些像個“系統”。然而好的技術不一定產生好的游戲……呵呵
有扯遠了,會到現實吧,boys and girls!goon.
描述一下我們的爆炸效果,在子彈擊中飛機後,子彈要迅速消失,飛機圖像保持不變,此時將爆炸效果至於飛機圖像之上,然後開始顯示boom動畫,在此期間,飛機不接受任何移動指示,因為他lose control。在爆炸效果後飛機消失。
我們的爆炸效果類:
GameObject explosion;//
初始化once:
img=ImageTools.getImage("/pic/explosion.png");//
explosion=new GameObject(img,32,32);
初始化:
explosion.reset();
explosion.lifetime=3;//生命周期定位三桢
邏輯處理:
if (gameover) {//如果游戲結束,顯示效果類
explosion.paint(g);
explosion.update();
if(!explosion.alive){//當生命周期結束了
plane.alive=false;//關閉plane
g.setColor(255,255,255);//輸出評語,下回分解
g.drawString(StringTools.timeOpinion(gametime),5,22,g.LEFT|g.TOP);
g.drawString("fly 0.1 ver by favo yang",2,100,g.LEFT|g.TOP);