Skip to content

Instantly share code, notes, and snippets.

@caasi
Forked from anonymous/post-ld25
Last active December 9, 2015 19:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save caasi/4319701 to your computer and use it in GitHub Desktop.
Save caasi/4319701 to your computer and use it in GitHub Desktop.

Curse You! - Postmortem

雖然鼓起勇氣參加 Ludum Dare,考慮到要是給自己太大的壓力,會影響到活動結束後的生活,決定抱著輕鬆的態度參加。

剛看到題目「You are the Villain」其實很困擾,本來以為題目會更抽象一點。單純當壞人搞破壞的主題滿常見的,所以打算給自己多一點時間想想,卻滿腦子都是鴨嘴獸派瑞與杜芬舒斯這一對XD。

前幾個小時都在塗鴉。那時候的想法其實比較長,希望我的怪盜紳士與警探至少追逐了三段才逃脫,包含更多不同的動作與特效。但動手後才發現這樣以畫面為基礎的發想,對不熟悉點繪的我來說,很要命,經過幾次試畫後,才變成現在這個樣子。

之所以選擇 80x60然後放大到 640x480,也是因為不擅長點繪。低解析度可以不用那麼具象,但怎麼樣在這樣的解析度畫出看得懂的東西又是一個難題。從這次的結果看來,也許使用多一點顏色效果會更好。

時間表

第一天

10 搞定 OBS
11 亂畫圖。
12
.. 中間記得是睡覺與其他私事。
22
23 搞懂 HTML5 canvas怎麼處理 scale後的 smoothing
24
01 搞定 CAAT的 ImagePreloader
02 在開 github pages repo
03
04 處理角色動畫;使用 tmuxinator幫助開發
05
06
07 加上計分板與警探
08
09

第二天

10
.. 睡覺、雜事
22
23 記得是在看動畫不想做事
24
01 加上更多動作
02
03 查了查 running cycle怎麼畫才好
04 然後又看動畫打混
05
06 開始畫背景
07
08
09 完成

總計大概花了 16小時。

錯誤

這次還是犯了幾個在 MITGJ與 Fukushima GJ犯的錯:不熟悉工具。

但是工具要從何熟悉起呢?除了真的做個遊戲外,有什麼可以讓我在 GJ本身比較安心,好專注在遊戲上?最壞的情況還得考慮到要是工具很陽春或是太疊床架屋,怎麼樣自己做出一樣的效果。

GUI元件

之前常常先做完遊戲本體,再來搞選單與介面,這樣會讓最後幾個小時陷入得精緻遊戲本身而無法把介面做得好用這樣的窘境。

與動態的遊戲不同,在遊戲前的選單與遊戲後的總結,可以簡單切割成幾個狀態。實作一個狀態機負責轉換,利用 Singleton或是 event來通知其他物件都很方便。

我關心的另外一點是輸入,有處理鍵盤事件的工具的話很好,要是沒有的話,怎麼樣可以輕鬆把控制移到不同的目標上很重要。不管要看狀態來決定,還是弄個簡單的 focus系統都好。尤其想做出不用滑鼠, retro風遊戲時怎麼樣只靠鍵盤,又要能操作選單,又要能操作角色。

事件系統

大概是因為以前寫 AS,我很喜歡事件系統或是類似的 Observer Pattern,這樣就不用偷懶弄個大家都會用到的 Singleton,只要讓「需要知道狀況的」向「管狀態的」註冊就好,所以找工具時偏好有事件系統的。

JavaScript有個好用的 EventEmitter2,在 server跟 client端都能用。雖然聽說沒有 Perl會是其他語言裡的好朋友那樣快,但對處理一個小遊戲來說十分夠用。不是很清楚這次用的 CAAT裡面有沒有類似的機制,但下次打算直接拿 EventEmitter2來用。

如何簡化 game loop更新世界

以前老用同一套方法,習慣在 paint/update前放進自己的 code,處理碰撞、還有整個世界的更新。雖然在現在這個可以開多 process、 thread的世界這樣沒效率,也許缺乏彈性,但對我來說這是確保在哪邊都有希望寫遊戲的方法XD 未來希望了解更多有關 concurrency的知識,不過那又是另外一個故事。

如果每個 object/actor在 update前都能云許我插入自己的 code,那這工作會變得簡單很多。JavaScript麻煩的地方之一是每個人可能都用不同的繼承方式,加上 CAAT又是先寫好再打包成單一的 js,在搞懂前不想隨便給 paint一個 wrap function了事。下次挑工具會注意這部份。

資源管理與 Sprite

過去被 Flash寵壞了,有個向量且以時間為主的動畫系統太方便。

資源管理這方面,這次只用到 CAAT的 ImagePreloader,他的作法是每讀完一張圖片會叫一次 callback,要做簡單的 loader也沒有問題。

心中希望能找到以時間為基礎,同時可以用一樣的介面操作 Sprite或是 Path動畫的工具。

動畫基礎

點繪動畫對一人開發者來說很重要,但是懶人如我對走路與跑步的循環完全不懂,最後還花了幾個小時查相關資料,才有勉強能看的動畫。

音樂

這是我的致命傷,不但不懂,連嘗試都沒有嘗試過。不知道有沒有什麼好工具,讓一點 sense都沒有的人也能做出能聽的音樂?

工作環境

這次一開始就打算用 JavaScript,在偷懶沒有先準備工具的情況下,只好用 node.js搞一個可以 host static pages的環境,加上以 ruby開發的神器 guard-livereload,可作到即時更新頁面。雖然沒辦法改數值的當下就看到變動(得重新開始遊戲),但配上半透明的 quake風 console tilda,按下 :w存檔時背後的 FireFox就會重讀網頁,這時把 tilda收起來就能可以開始玩了。

這次沒注意到怎麼轉播比較好,雖然 Windows上面有 OBS,在 Linux上有 ffmpeg,但設定 OBS就搞掉了一整晚, Linux這邊還是下次吧XD 而且這台筆電頗舊,這樣一搞會影響到開發吧。得靠影像擷取卡,但是不確定桌機有沒有多的 PCI-E槽,加上那又得花不少錢。

Timelapse在哈士奇的推薦與做一些功課後發現,下次可以用 chronolapse跟 gTimelapse。

之後

想再看一次電玩物理學,雖然那本以 O'Reilly的書來說,翻譯得普普,但以前沒能好好實作裡面提到的技巧,現在看來很傷,只好一直用陽春的方式模擬速度與加速度。

再來除了自己的構想外,加上一些建議,有點想把這個遊戲做完XD

  • 無盡模式
  • 幫忙保護警探
  • 擦彈
  • 自動生成地形與背景
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment