第5章
今天開始做遊戲(2)
Flash很快就安裝好了。
你一邊照著帖子上的教程登著ID是一串字符的賬號,一邊構思你的第一款遊戲到底要做什麼。
首先題材已經被框定了,FPS第一人稱射擊類遊戲。
你第一反應就是買菜穿越前還在玩的COD19,Call of Duty,使命召喚。
笑死,一個人?做COD?用Flash?我嗎?
不過你也沒太糾結,畢竟你的目的隻是糊弄著做一個隨便用槍打打什麼的垃圾小遊戲。
它不需要拿獎,不需要好玩,隻要能過平台審核就行,然後你再拿槍出去找三個黑幫“死”忠粉——齊活兒!
打定主意,你開始在資源站中搜索自己想要的模板。
不行,這個資源包好大,你沒那麼大野心。這個好大,這個也好大,那個更大?!
不是,兄弟,不是,你們擱這兒卷你嘛呢?
最終,你點開一個最小的。標題寫著《[源碼] FPS射擊練習場+計分+音效》,作者貼了一張預覽圖:一個非常簡陋的射擊場畫麵,灰色背景,遠處有幾個紅色的圓形靶子,屏幕中央有一個十字準星,點擊鼠標就能開火,靶子被擊中時會有一個小小的爆炸特效,然後消失,過一會兒重新出現。
要麼……就抄這個?換換貼圖啥的,然後去教堂祈禱一下審核今天心情好?
你盯著那個射擊練習場的源碼看了大概十分鐘。代碼量不大,結構也清晰,但你越看越覺得老己命苦。
準星移動、鼠標點擊、射線檢測、碰撞判定、爆炸特效、分數更新、靶子刷新——每一步都是標準的FPS射擊邏輯,是最基礎的開槍模塊。理論來說,你隻要把"瞄準→開槍→判定→反饋"這一套流程完整跑通就行——行個屁啊!!
先看第一步:瞄準。
玩家在屏幕上移動鼠標,屏幕上有一個準星跟著動。看起來很簡單對吧?但代碼需要做這幾件事:
1. 監聽鼠標移動事件——例如,電腦需要知道"你的鼠標從X=100,Y=200移動到了X=105,Y=198"
2. 更新準星位置——把準星圖片/圖形挪到新的坐標上
3. 限製準星範圍——不能讓準星跑出屏幕外
這些都是一個叫"鼠標移動監聽器"的東西在乾。雖然你隻需要寫一次,但寫一次也需要一個完整的函數。
接下來的開槍判定反饋就不說了,粗略算了下,你至少需要五個類、三個事件監聽、兩個動畫循環,還要考慮鼠標拖拽和點擊的衝突處理——不算debug,光寫這些就能讓你眼前一黑,更別提你還沒開始做場景、做引導、做UI……
老祖宗說得好,世上無難事,隻要肯偷懶,你今天怎麼也得想個辦法把這懶給偷了。
你關掉那個源碼頁麵,靠在椅背上盯著天花板,開始滿腦子亂想:既然休閒遊戲一點也不休閒,那麼格鬥遊戲可不可以不格鬥,射擊遊戲可不可以不射擊,事情都這樣了今天午飯吃點啥好呢?
…不對,等等,倒帶——“射擊遊戲可不可以不射擊”。
你猛地坐直了。
你的任務是做一款FPS遊戲。FPS全稱"第一人稱射擊"。但"射擊"這個動作在刨除代碼後本質是什麼?是"玩家在一個視角裡,通過某種操作,告訴遊戲'我要攻擊那個方向',然後遊戲判斷那個方向有沒有東西可打"。
但如果你把"告訴遊戲我要攻擊那個方向"這個動作簡化一下呢?——簡化成"我點了一下屏幕上的某個位置,遊戲檢查那個位置有沒有東西"。
這就不是射擊了。這是點擊。
"如果我不需要準星呢?"
如果我不需要準星,就不需要鼠標移動監聽器來更新準星位置,不需要限製準星範圍,也不需要考慮鼠標拖拽和點擊的衝突——因為你隻有點擊,沒有拖拽。
"如果我不需要射線檢測呢?"
如果你不需要判斷"子彈從槍口飛出去撞到了什麼",那你就隻需要一個簡單的坐標比對——鼠標點擊時的X/Y值是否落在規定坐標範圍內。
那麼,碰撞箱,彈道計算,統統不需要。
你越想越覺得自己之前犯一個巨大的錯誤——你一直在用做CS,做類COD,又或者三角洲的思路去想FPS遊戲,但你要做的根本不是這種級別的遊戲。
你要做的是一款:看起來像是射擊遊戲,但本質上是個點擊找茬的東西。
《你就說是不是第一人稱射擊吧!》
你想起來了個看廣告時誤點的小遊戲:殺光外星人。
那個遊戲因為玩法簡單上頭讓你印象深刻——一張靜態的城市照片,裡麵藏著十來個顏色和背景幾乎融為一體的外星人。玩家拿著一把“狙擊槍”,可以切換全景視角和瞄準鏡視角,在限時內找到外星人,開槍擊殺。
——沒有準星,沒有彈道,沒有換彈動畫,甚至連"開槍"這個動作都被簡化成了"點擊"。
玩家“狙掉”外星人的那一刻,鏡頭視角會輕微震動一下,屏幕上彈出一個紅色的"+1",伴隨著一聲清脆的"啪"——就像是你在很遠的地方扣動了一下扳機,然後看到目標倒下。
這遊戲你從誤點到上頭,一宿玩了三百多關,地形越來越大,時間越來越近,到最後看廣告複活都救不了找外星人找的頭暈眼花的你。
所以,本質上,這是個找茬遊戲,但在通關的時候,玩家確實會感受到自己在"射擊"。
你重新理了一遍思路,發現自己真正需要的東西其實沒幾樣:顏色豔麗的卡通版城市背景圖包,場景內隨機生成的抽象人形,一個跟隨鼠標移動的圓形放大鏡一個點擊判定,,再隨便從免費音樂庫拖點BGM……
一個白天,一雙手,一台電腦,一個奇跡。
”!美完“
。戲遊傳上台平戲遊TS在刻立,意滿常非你
》人星外死殺《:稱名戲遊
!淨純歸重市城的們我讓,槍擊狙的你上拿,友朋的我,你而,去爬來爬裡市城的們我在,螂蟑像就人星外,候時的道知不們我在:介簡戲遊
。分美一統統,分美一,的人弄糊來是就我……話的買購,個一給局單告廣看,分部一給到簽,嗯……具道人星外找和間時關過長延,費免體本戲遊,了價定是就後然
】。叮【
】5/2:粉忠死。0:量載下。)人本主宿(1:量覽瀏前當。台平開公至布發在正》人星外死殺《品作主宿到測檢【
】啟開前提城商金現,啟開前提城商邊周,啟開前提城商業競,成完額超務任手新,%001度成完戲遊【
】邊周份一到得得值,後戲遊的你成完在,人作製戲遊的秀優個一:城商邊周【
】!ffo%08把十前,元983價廠工,買購放開型模藏收端高槍步擊狙動栓42M,功成成生……中成生邊周戲遊。人星外死殺:戲遊成完前當【
】)nim1/值絲粉1(蕾味出長生內腸大員成司公品競位一定指,)次/值絲粉2(電斷室公辦給時準點三午下天每,)次/值絲粉2(水開澆樹財發司公品競給:城商業競【
】。值絲粉1換兌元美0846,元美846換兌值絲粉1,值絲粉01換兌粉忠死01:城商金現【
”?術之蕾味腸大……的名有很個那是就這,啊熟眼好“:問巴下著摸,度程譜離個這換互元美和值絲粉槽吐上不顧你
】。)nim1/值絲粉1(蕾味出長生內腸大在員成司公品競位一定指【
】。傷損性質器成造不果效該。鮮鹹苦甜酸知感常正可,蕾味性能功成生會壁內腸大其,間期續持果效在標目:明說果效【
”?我射點準瞄持堅,誌意的樣一鐵鋼有會不會他,餐套腸大份一買他給我,手槍機個一有前麵的我果如“:圈一了轉,後腦在枕手隻兩,上背椅在靠你”,哈設假是隻就,設假我“
。兒會小一了默沉統係
】。應反等斥排性理生至甚、驚震、心分現出率概高較有,道味物容內腸結到知感續持將,間期果效在標目:析分論理【
”?呢了奮亢致導怒激被者或又?呢屎吃歡喜他是要“
】……【
”?麼買工員的己自我給能我,餐套個這有還“
】……【
。去麵前到移型模槍擊狙的8塊77要隻價現,ffo%08把十前把地味一是隻就,語不統係