發表文章

目前顯示的是 2022的文章

Good Game Editor HTML5 porting (resource browser)

圖片
斷斷續續製作了一個HTML5版本的Good Game Editor,一方面是作為測試及學習web相關技術,一方面也是利用這個過程持續對good作點改良。雖然目的是想作一個HTML5版的編輯器,但實際上目前只作到resource browser,可以在web browser開啟good package作資源檢視。目前大部份的功能還是原來的C++ code直接以emscripten編譯成javascript,再加上少部份javascript,最後利用w3.css作排版。 < 試試 > 點擊連結會列出網站上good/uploads目錄下的所有good package,可以再點擊package的play來試玩或者是edit開啟編輯器(res browser)。 目前編輯器大致可以檢視所有類型的資源,包含聲音(audio)、貼圖(texture)、精靈(sprite)、地圖(tilemap)、關卡(level)、腳本(script)及粒子腳本(particle)。 如下圖,為點擊herobye.zip這個package的Edit時顯示的第一個畫面。 編輯器畫面主要分為3個部份。左側依據不同類型資源,列出所有資源列表。右側是屬性顯示區,顯示選取的物件屬性資料。中間區域為編輯區,依據選取的不同類型物件作不同顯示。 下圖是選取了聲音(audio)類型的資源,編輯區顯示標準的播放聲音介面。 下圖是選取了貼圖(texture)類型的資源。 如下圖是選取了精靈(sprite)類型的資源,編輯區顯示此精靈每個frame的資訊及在上方播放精靈動畫。而右側屬性區也會顯示此精靈使用的貼圖物件。 下圖是選取的地圖(tilemap)類型的資源,編輯區顯示己編輯的tilemap,右側屬性區也會顯示目前地圖使用的貼圖。 下圖為選取關卡(level)類型的資源,編輯區顯示關卡內容,右側屬性區上方顯示關卡內物件的階層圖。點擊階層圖上的子物件時,右側屬性區下方會再顯示選取子物件的屬性資訊。 下圖為選取腳本(script)類型的資源。 下圖為選取粒子腳本(particle)類型資源。編輯區有二個分頁,左分頁Source同腳本一樣顯示script內容。右分頁Test為粒子執行preview畫面,同時右側屬性區上方也會列出所有可測試的particle script名稱,點擊時立即執行作preview。

867的HTML5移植

圖片
[ PLAY ] 這個遊戲是較早期的作品,所以使用的技術是以當時自己較熟悉的 Win32 相關技術製作。遊戲核心部份一開始就己分離出來,但還不是100%跨平台。畫面部份是以Win32 GDI呈現,以及透過Windows視窗機制處理輸入。本次目標是將遊戲移植到 HTML5 ,主要的工作有三個部份。 將遊戲核心Gameplay確實作到跨平台。 將畫圖及輸入部份抽離作到跨平台。 將遊戲移植為HTML5可以在Browser上執行。 第一部份己幾乎完成了,只需再作點小修改就能達成。主要的移植工作在於第二和第三部份,以下是這部份工作的重點記錄。 抽離繪圖層 因為867和Win32 GDI緊密結合,一時無法輕易的將繪圖層抽離出來。萬事起頭難,可以先從最簡單的改良開始,一次一小步逐步重整。首先增加一個Renderer類別,只包含一個很大略的一個render函數。而render函數的實作,是根據當前遊戲狀態透過renderTitle和renderGame二個函數實作遊戲的全部繪圖。 class Renderer { public: void render(const Game &game, CDCHandle& dc) { switch (game.iStage) { case Game::STAGE_TITLE: renderTitle(dc); break; case Game::STAGE_GAME: renderGame(dc, Game::MENU_NONE); break; case Game::STAGE_MENU: renderGame(dc, Game::MENU_GAME); break; case Game::STAGE_DIE: renderGame(dc, Game::MENU_NONE); break; case Game::STAGE_OVER: renderGame(dc, Game::MENU_OVER); break; case Game::STAGE_WIN: renderGame(dc, Game::MENU_NONE);

耐心烏龜 Patience

圖片
有一次去看診的時候,因為等了好久等到有點快失去耐性,看完診花了不少時間。在回家的路上有感而發,想說不知道有沒有什麼可以訓練或培養耐性的方法。如果沒有的話,或者我自己可以作個APP來達到這個目的,最後就作了這個APP。 < 玩 玩 > < Android > 一開始想到的不是烏龜,而是主畫面是一個泡泡。這個泡泡會愈來愈大,但很容易就破掉。比如不小心點了畫面、程式進入背景、有來電或收到訊息通知等等,都會讓泡泡破掉。程式的目的就是想辨法讓泡泡持續變大,也就是你愈有耐心的保護它,就愈成功。可能可以顯示一個存活時間,用來表示耐心度。 後來一邊考慮程式內容時,一邊把泡泡改成了烏龜。同時考慮到,如果這隻烏龜很容易就死掉,要用這種方式來訓練耐心似乎很難,甚至會有反效果。考慮到一次性的遊戲方式,以存活度來評價耐心度有難度,改變為養成性質的作法。現在不會死掉了,存活時間是累計制的。這樣子應該會比較容易讓人持續的去作這作事,長期下來應該就能提高點耐心吧。 改成養成性質的作法後,其它的設計就能對應調整。首先除了存活度(存活時間)之外,再加上一個等級。這個等級的定義,只是簡單的每次烏龜從左走到右就升級一次。等級每升一級,烏龜就長大1個pixel。同時等級也對應烏龜移動速度,LV10表示每10秒烏龜走1個pixel。以上是核心功能,其它還設計了幾個裝飾畫面的功能。如上方背景日夜變化、月相變化及顯示12星座等。 以下作重點說明。 背景連續山脈圖 背景的山是先建好一個div元素,以CSS設定背景水平重複。   // CSS.   #mountains {     background-repeat:repeat-x;     background-position:bottom;     text-align:     right;font-size:48px;   }   // HTML.   <div style="mountains">   </div> 重複的圖片則以一記憶體canvas畫了一個山型emoji後產生。 var mountains = document.getElementById('mountains'); var url = getCharImgUrl(32, '⛰️');