Flash游戏开发实战(一)
我不得不承認,我不是植物大戰僵尸的骨灰玩家,所以,如果你發現這個系列的教程有什么地方錯誤的,請告訴我。
定義游戲的主要結構
植物大戰僵給了我們很好的視覺和感覺上的享受。你得保護你的房子以免被吃腦的僵尸入侵,這相當的吸引人。總的來說,殺死僵尸是很有趣的。但是這視覺上的東西和游戲玩法無關,我們可以用屠夫大戰管子工,鴿子大戰駱駝,圓形大戰方塊來代替。
在這個系列的教程中,我們用圓形來代替植物,用方塊來代替僵尸,偉大的圓形將會阻止邪惡的方塊進入我們的基地。游戲區域可以被簡化為一個區塊游戲。
設想一下這種局面:
然后盡量把它想象成這樣:
我們所擁有的是一個位于(2,2)的植物,它會盡力阻止走在第二行(從第0行開始,下同)的僵尸,并且另一個僵尸正在沿著第三行接近我們的基地,還有一個正從第四列落下的陽光。不可能有另外一個植物位于(2,2),并且不可能出現一個僵尸走在第二行與第三行之間。
創建游戲區域
正如你在上圖看到的那樣,這個游戲的區域是一個5行9列的矩陣。因此,第一件要做的事就是定義一個數組。我設想你的fla文件有一個文檔類為Main。下面是Main.as的內容:
package {import flash.display.Sprite;public class Main extends Sprite {private var gameField:Array;public function Main():void {setupField();}private function setupField():void {gameField=new Array();for (var i:uint=0; i<5; i++) {gameField[i]=new Array();for (var j:uint=0; j<9; j++) {gameField[i][j]=0;}}}} }?
這樣,gameField數組就是一個5*9的矩陣了。
畫出游戲區域
下面的代碼對于測試來說足夠了,至少我們會畫出一個游戲區域來。
drawField函數所做的事情都能夠在setupField函數里實現,但是我想讓他們分離,我得讓一個函數只處理一件事。唯一有趣的一行代碼是第25行的是在#007D00和#00AE00之間生成隨機顏色。
這就是我們的游戲區域了。如果你想要讓區塊體面點。請。。。自便。
捕獲陽光
陽光是植物大戰僵尸里的貨幣。他們從天上掉下來,落到某一區塊上。撿起這些陽光,你才能購買植物。
我用到了timer事件使得每五秒落下一束陽光,如果你對timer還不熟悉的話,請搜索。
現在,陽光還不會從天上掉下來,而是直接出現在某一隨機的區塊中。此時此刻,我還不知道是否兩束陽光可以同時落到同一區塊中。在這個例子里,他們是可以的,但是如果原版的植物大戰僵尸里不允許這樣的話,請告訴我。
當一束陽光落到地上的時候,它能夠被玩家撿起。一個鼠標事件偵聽器處理這整個任務。下面是代碼:
package {import flash.display.Sprite;import flash.utils.Timer;import flash.events.TimerEvent;import flash.events.MouseEvent;public class Main extends Sprite {private var gameField:Array;private var flowersTimer:Timer=new Timer(5000);private var sun:sunMc;private var sunContainer:Sprite=new Sprite();public function Main():void {setupField();drawField();fallingSuns();}private function fallingSuns():void {addChild(sunContainer);flowersTimer.start();flowersTimer.addEventListener(TimerEvent.TIMER, newSun);}private function newSun(e:TimerEvent):void {var sunRow:uint=Math.floor(Math.random()*5);var sunCol:uint=Math.floor(Math.random()*9);sun = new sunMc();sunContainer.addChild(sun);sun.x=52+sunRow*65;sun.y=130+sunRow*75;sun.addEventListener(MouseEvent.CLICK,sunClicked);}private function sunClicked(e:MouseEvent):void {e.currentTarget.removeEventListener(MouseEvent.CLICK,sunClicked);var sunToRemove:sunMc=e.currentTarget as sunMc;sunContainer.removeChild(sunToRemove);}private function setupField():void {gameField=new Array();for (var i:uint=0; i<5; i++) {gameField[i]=new Array();for (var j:uint=0; j<9; j++) {gameField[i][j]=0;}}}private function drawField():void {var fieldSprite:Sprite=new Sprite();var randomGreen:Number;addChild(fieldSprite);fieldSprite.graphics.lineStyle(1,0xFFFFFF);for (var i:uint=0; i<5; i++) {for (var j:uint=0; j<9; j++) {randomGreen=(125+Math.floor(Math.random()*50))*256;fieldSprite.graphics.beginFill(randomGreen);fieldSprite.graphics.drawRect(25+65*j,80+75*i,65,75);}}}} }下面簡要概述一下用到的函數:
drawField:畫出游戲區域
fallingSuns:開始制造陽光,使他們墜落
newSun:創建新的陽光
setupField:生成區塊數組
sunClicked:當玩家點擊陽光時調用
下面是效果:
用鼠標撿起陽光吧。
轉載于:https://www.cnblogs.com/delphi2014/p/4077087.html
總結
以上是生活随笔為你收集整理的Flash游戏开发实战(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux生成证书
- 下一篇: 配置web项目session永不超时