跳到主要內容

發表文章

目前顯示的是有「Editor」標籤的文章

任務檢測器

翻到一個古董,再把資料檔案翻出來,還可以執行!這是第一份工作時製作的小工具之一,功能是用來檢視及測試編輯好的任務。設計的這個Script實際上就好像是在寫組合語言一樣,只不過到後來企劃也訓練的會寫組合語言了... (單步/執行結果) (玩家屬性) (任務原始碼) (字串表)

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。 ...

Good Game Editor 1.6.4

改良關卡編輯器(LevelEditor)中Dummy物件圖示。 地圖物件(Map)或精靈物件(Sprite)只有在實際出現在畫面中時才載入貼圖。 關卡編輯器(LevelEditor)點擊物件階層樹上的物件時畫面立即捲動至該物件。 關卡編輯器(LevelEditor)中物件顯示不可見狀態圖示若父物件為不可見狀態。 Util新增Good.GetScreenPos計算物件銀幕絕對座標。 修正取得色塊物件大小尺寸的錯誤。 一個DrawCall最多支援一次畫1024個物件。 新增 Graphics.GenCanvas 、 Graphics.KillCanvas 支援建立及刪除虛擬畫布。 新增 Resource.UpdateTex 支援以虛擬畫面更新貼圖資料。 Graphics.FillRect 、 Graphics.DrawImage 及 Graphics.DrawText 支援繪至虛擬畫布。 [ 下載 ]

Good Game Editor 1.6.2

* 修正播放器(In Editor Player)顯示貼圖資訊的問題。 * 修正關卡編輯器物件樹點擊關卡物件程式當掉的問題。 * 新增 Good.GenObjEx 支援從外部資源包(External Good Package)生成物件。 Download

Good Game Editor 1.6.1

* 新增可以Undo關卡的寛高。 * 修正關卡編輯器(LevelEditor)顯示格點的效能問題。 * 新增可以指定關卡的位置屬性。 * 新增在狀態列上顯示關卡編輯器(LevelEditor)目前寛高及左上角位置資訊。 * 修正關卡編輯器(LevelEditor)中點擊貼圖物件右下角範圍選取小工具無效的問題。 * 修正當物件數量太大時造成當機的問題。 * 修正動作編輯器(Sprite Editor)Undo時當機的問題。 * 修正 Good.IsAnimPlaying 不能正確工作的問題。 * 修正 Good.GenObj 生成關卡資源內的子物件時沒有設定指定script的問題。 * 播放器FPS資訊新增顯示目前物件數量及最大物件數量資訊。 * 播放器只在畫面內容有變更時才重繪畫面。 < Download >

Good Game Editor 1.6

* 新增 Graphics.DrawText 。 * 新增 Graphics.SetAnchor 。 * 關卡編輯器(LevelEditor)中物件左上角顥示狀態圖標:IsVisible,RepX,RepY,HasScript,ImageMissing。 * 支援一次新增多個貼圖資源(New Texture)。 * 新增播放目前選取關卡(Play This Level)功能。 * 關卡編輯器(LevelEditor)中物件支援階層關係編輯。 * 關卡編輯器(LevelEditor)新增編輯Dummy物件。 Download

Good Game Editor 1.4.4

* 修正貼圖物件在負數Scale時顯示錯誤。 * 修正編輯器開啟舊檔時偶發性當機的問題。 * 修正地圖編輯器(MapEditor)繪製圖格超出地圖範圍時造成當機的問題。 * Good.OBJ更名為 Good.SPRITE 。 * 新增 Good.SetName 。 下載 Good Game Editor 1.4.4 + libgood 1.4.4 下載Good Game Player Android 1.4.4

Good Game Editor 1.4.3

* 物件屬性檢視器(Property View)的ComboBox改為以關卡編輯器(Level Editor)的物件列表取代。 * 新增 Resource.GetFirstLevelId 。 * 新增Ctrl+F5開始播放資源樹指定關卡。 * 新增 Good.GetName 。 * Good.IsVisible更名為 Good.GetVisible 。 * 新增範例animator(簡易動作系統)。 下載Good Game Editor 1.4.3 下載libgood-1.4.3 下載Good Game Player 1.4.3 Android

Good Game Editor 1.4.2

* 支援Good.GenObj可以生成任意關卡資源內的子物件。 * 修正搜尋路徑(Search Path Dependency)的錯誤。 這個功能作好後一直沒真正被使用,所以也一直沒有發現到有問題。所以說, 沒用到的功能還是儘可能不要去作 ! * 播放器(In Editor Player)新增顯示目前使用貼圖資訊(Ctrl+Alt+T)。 * 編輯器新增輸出ZIP格式資源包(Create ZIP Package)。 * 擴充Good.GetTexId可以回傳地圖物件(MAPBG)的貼圖ID。 下載Good Game Editor 1.4.2 下載Good Game Player 1.4.2 for Android

Good Game Editor 1.4 Release

* 粒子程式編輯器(STGE Script Editor)編譯程式前提示存檔。 * 動作編輯器(Sprite Editor)選取項目使用紅色框。 * 新增Resource.GetMapTileSize。 * 新增範例snake(貪食蛇)。 * 新增範例solar(物件階層)。 * 取消TGA圖形格式支援。 * 最佳化繪圖程序。 * 修正Good.Clone的錯誤。 * 動作編輯器(Sprite Editor)改版,整合Preview視窗至編輯區。 * 修正Good.CallPackage機制堆疊錯誤。 * 更名Resource.GetMapTileSize為Resource.GetTileSize。 * 更名Resource.GetTextureId為Resource.GetTexId。 * 更名Resource.GetTextureSize為Resource.GetTexSize。 * 更名Resource.GetTileMapSize為Resource.GetMapSize。 * 更名Sound.ReleaseSound為Sound.KillSound。 * 線上API參考手冊改連至 WIKI 。 * 關卡編輯器(Level Editor)新增自訂貼齊格線大小。 * 修正當Tile寬高不同時顯示地圖物件的錯誤。 * 修正Resource.GetNextLevelId錯誤。 * 新增範例link(連連看)。 * 自動儲存及載入視窗屬性。 * 編輯器內建的播放器支援即時顯示除錯訊息。 * 修正開啟另一個專案時程式崩塌的錯誤。 * 修正Good.PickObj無法Pick子物件的錯誤。 * 移除Good.PickColorBgObj/PickMapObj/PickSpriteObj/PickTexBgObj。 * 新增Good.PauseAnim。 * 新增Good.AddChild index參數,允許指定位置加入父物件。 * 所有類型的物件都可在關卡編輯器(Level Editor)中指定顏色。 * 新增Good.IsAnimPlaying。 * 新增開新專案對話盒(New Project Dialog)。 * 編輯器不支援縮放。 * 新增範例numbers。 * 新增關卡編輯器貼圖物...

Good Game Editor 1.3 Beta

* 新增TGA圖形格式。 * 關卡編輯器(LevelEditor)加大物件選取框。 * 修正程式碼編輯器(SciprtEditor)鍵盤焦點(Focus)問題。 * 範例StgeTest1更名為stge1。 * 移除貼圖的KeyColor屬性。 * 移除View選單裡的Toolbar及Status Bar選項。 * 新增範例fire(火焰模擬)。 * 新增Resource.GetTextureSize API。 * 新增Graphics.DrawImage及Graphics.FillRect API。 * 新增粒子測試器(STGE particle script tester)。 * 新增OnDraw事件(OwnerDraw)。 * 新增範例stge2(粒子效果)。 * 預設ShowFps開啟。 * 新增MRU(Most Recently Used)。 * 修正一個拼字錯誤(You are using latest version)。 * 拿掉新增貼圖對話盒(Add new texture dialog),簡化成開啟檔案對話盒(Open file dialog)作檔案選取。 * 修正地圖編輯器(MapEditor)輔助線編輯器的顏色選擇鈕沒有正確重畫的問題。 * 新增範例savegame(記錄檔讀寫)。 * 修正遊戲視窗改變大小時滑鼠座標產生的誤差。 * 新增範例mouse(滑鼠狀態)。 * 地圖編輯器(MapEditor)橡皮擦工具也能以右鍵選取區塊範圍。 * 修正地圖編輯器(MapEditor)編輯狀態錯誤的問題。 下載

Good Game Editor 1.2 Beta

* 新增Good.KillAllChild * 關卡編輯器(Level Editor)支援按住Alt鍵以滑鼠拖曳物件作複製。 * 修正在關卡編輯器中拖曳物件過程中按ESC鍵的處理錯誤。 * AboutBox中,zlib及yardparser文字位置對調。 * 關卡編輯器新增使用方向鍵移動物件。 * 關卡編輯器中(Name|Visible|Rot|Scale|Repeat|Script)等屬性可以undo/redo。 * 關卡編輯器支援按住Shift鍵以方向鍵作色塊及貼圖物件縮放。 * 關卡編輯器支援以Tab鍵切換選取物件。 * 修正Good模組API傳入物件Id(0)的錯誤。 * 去掉Good模組中物件類別常數的前綴詞TYPES_。 * 去掉Input模組中按鍵常數的前綴詞KEYS_。 * 以Good.SetBgColor設定關卡物件BgColor等同於設定關卡背景清除顏色(ClearColor)。 * 新增範例lvlbg。 * 新增範例動態選單(menu)。 * 工具列新增一個可以開關ResourceView及一個開關OutputView的按鈕。 * AboutBox的連結(又)改成按鈕型式。 * 修正一個新增關卡的小問題,將HasClearColor初始為false。 * 將範例程式中使用的一些BMP圖形格式轉為PNG。 * 新增單人撲克牌遊戲:蒙地卡羅。 * AboutBox添加Wiki連結。 * 編輯器(Editors)的縮放比例最大可到800%。 * 修正一個新件貼圖物件大小計算錯誤的問題。 * 新增Good.GetTexId/SetMapId/SetTexId API。 * 新增檢查是否有新版本編輯器的功能(Help\Check for Update...)。 * 新增一個sample,簡單的示範縮放及旋轉(scalerot)。 * 移除AboutBox裡的waync's smallworld連結。 * 修正Good.GetDim在讀取貼圖物件時沒有正確回傳寬高的問題。 * 修正時間控制的問題,這樣在某些電腦上不會一執行遊戲時就失速。 * 新版本也能在iPhone上通過編譯執行。 * 增加對物件作縮放(xScale,yScale)及旋轉(Rotate)的支援。 * 把25940m改版一下支援iPhone,當作測試。 * 除了可以在Dependen...

good Game Editor 1.1 Beta Release!

遊戲資源編輯 貼圖 (Texture editor, Jpeg, PNG, BMP) 聲音 (Audio, OGG, WAV) 地圖編輯 (Map editor) 精靈編輯 (Sprite editor) 關卡編輯 (Level editor) Script編輯 (Script editor) 範例程式 打磚塊/寶石方塊/踩地雷等16個小遊戲範例 遊戲範例 25940m 輸出WIN32獨立可執行檔 (Stand-alone exe) ; 本來要等到加上文字物件後再釋出,不過這陣子比較沒時間更新,所以先把目前的版本作為1.1beta釋出... 這個版本作了許多小更新,主要在加強 particle的部份,應用方面可參考25940m,另外API reference也作了更新。 下載good Game Editor 1.1 Beta API 參考手冊

自動解壓縮程式原理

許多朋友來信詢問關於編輯器 CreateExecutable 的運作原理,所以這篇文章就來講講背後的技術原理。 底下提供一個簡單的方法,也是編輯器使用的方法,而這個方法只能適用在Windows作業系統,因為它使用了Windows系統的資源機制。Windows提供了一系列的API可以讓你對 PE 執行檔內的程式資源作存取。利用這點,只要我們作點變化稍加利用就能夠達到我們的需求。 + + + 先說明good編輯器產生獨立的單一可執行檔的操作過程。 1,開啟舊專案 2,執行選單Project->Create Executable 3,選擇輸出目標 4,按下儲存 整個動作完成後,會產生一個不必編輯器就可以獨立執行遊戲執行檔。其實這個動作就相當於,編輯器會幫你產生一個內建了遊戲資源的播放器(Player)。 那麼這個播放器是從那來的?答案是它是事先建立好,然後被藏在編輯器裡。當使用者執行了Create Executable操作時,編輯器會從自己身上取出這個Player,然後再把專案所有相關資源,當成資料又全塞到Player裡,全部掺在一起打包成一個獨立的執行檔。當執行這個執行檔時,Player會先從自己身上找到遊戲資源,解開,載入遊戲,然後開始執行。 要完成上述的功能,主要有二件事情。第一就是如何把資料藏到執行檔內,第二就是載入藏在執行檔內的資料,以下分別說明。 + + + 在VS.NET裡執行Add Resource功能時可以選擇要加入的資源類型,這些類型是Windows預設的,例如Bitmap/Cursor/Dialog/Menu/String Table等等。假如要加入的不是內建的資源類型,你也能在AddResource對話盒點選Custom鈕加入自訂資源。自訂資源用一個自訂的字串來作區別,例如"GameData"。如下圖所示,加入了一個"TEST"類型的資源,ID是IDR_TEST1,對應到外部檔案res\test1.bin。 以上是用工具的方式來加入自訂資源,只要是能夠編輯程式資源的工具都能拿來應用,而不限只能用VS.NET。接著我們來看怎麼用程式來加入資源。 Windows提供了 BeginUpdateResource , UpdateResource 及 EndUpdateResource 三個API來讓...

good sample list

在一邊開發good編輯器及核心功能的時候,也同時會製作使用到對應功能的小專案來作測試。目前總共有8個範例,有的是很小的測試程式,也有的是具體而微的小遊戲,下面作個整理及簡單介紹。 weeder 鋤草機 這是最早作的範例,因為 鋤草機 這個小遊戲感覺起來最單純,所以就拿它作為一個標的,以把它用good實作出來為目標來開發good相關功能。一開始只編輯了一個關卡,後來花了點時間,將原作裡12個關卡全部編輯出來,作成完整版。 zelda 薩爾達 這是最早開發good的起因,為了重製薩爾達作為練習。一開始重點放在地圖編輯器上,也花了不少時間編輯世界地圖。整合了 Lua 後,再加上一小段程式碼,讓林克可以在地圖上走動。不過和最終的目標還相差太遠,只能在地圖上走走路,作些簡單的碰撞,只好等有機會再繼續未完成的工作。 mmc 魔法寶石方塊 為了驗證good也能製作出這種類型的遊戲,花了幾天時間編輯實作這個小遊戲的雛型出來,效果還不錯。 texture 貼圖物件 加上這個功能後,才能以更簡單的方法製作拼圖遊戲。沒有這個功能,也能作出拼圖這樣的遊戲,只不過是需要使用較曲折麻煩的方法作到。 color 色塊物件 有了色塊物件後,就不必以填貼圖的方式來填色,省圖又方便。 stge 粒子系統 很早就規劃打算要整合stge模組。雖然stge本來是專門設計來製作彈幕射擊遊戲,但因為它本身的設計就是一個以粒子為核心的系統,所以不一定只能被用來製作射擊遊戲,也能夠作為一般用途的粒子系統。目前還不算100%整合完成,但已經可以拿來作應用。等到更完整的整合完成後,就能用good來重製 25940p 。 puzzle 拼圖 在貼圖物件功能加入後,就能很簡單的製作出這類型的應用。 mario 瑪莉歐 這是拿來作gameplay練習的小品,實際上寫的不是很好,細節部份還有許多加強的空間。

good spec

程式語言 程式語言:C/C++ 編輯器 系統平台:Windows 視窗框架: WTL 執行時期 系統平台:Windows,MacOS/iPhone 程式庫:smallworld2,stge 第三方程式庫: Lua / SDL / zlib / Boost.Spirit 繪圖(gx) GDI SDL OpenGL 編輯器使用WTL作視窗框架實作,所以主要是以C++ Template實作。而Runtime部份則整個使用C++ Template實作,主要區分成三大模組:good、ed和rt。另外還有個gx模組,簡單定義了圖形介面讓其它模組使用來作圖形繪製。 good模組提供了資源管理的功能,ed模組繼承good模組再擴充編輯功能,而rt模組繼承good模組實作Runtime及提供Script擴充介面。其實正確來說,rt模組並非繼承good模組,而是包含good模組,透過包含及使用good模組作為資源管理。 good模組是個狀態管理器,只能載入資源和讀取內容。ed模組則繼承good模組提供編輯資源內容的功能,可以修改資源並存檔。而rt模組透過good模組載入資源,再經由RunTime及Script將資源和物件關聯起來,並付予物件動作邏輯,最後再透過gx模組將結果呈現在畫面上。

色塊背景物件

新增了一個純色塊背景物件類別。底下是一個簡單的測試抓圖。 為了提供這個功能,有幾個地方需要跟著作修改。首先當然是核心部份要加上新的物件定義,再來是編輯器部份要可以作新增,最後是執行時期要可以畫出這樣的物件,以及新增幾條Script呼叫。 核心的支援 這部份其實也沒什麼,主要就是在原本的物件類別上新增一個色塊背景的子類別項目。同時還需要新增二個屬性來支援這個新類別,分別是物件的大小以及背景顏色。 物件大小是一個有四個數字欄位的複合屬性,分別是左上位置以及寬高,目前只用到其中的寬高二個屬性。 編輯器的修改 編輯器裡主要需要作修改的是關卡編輯器。在工具列上新增一個鈕,用來在關卡裡新增一個色塊背景。 可以加入後,還要在View裡把它畫出來。除了畫出來之外,還要處理它的HitTest、PropView的支援等等。 執行時期 執行時期的支援最單純,只是作畫而已。 新增Script呼叫 對應新物件,新增了四條Script API。分別是Good.GetDim、Good.SetDim、Good.GetBgColor及Good.SetBgColor。 SetDim及GetDim是用來存取物件的範圍屬性,目前只使用到寬高二個值來決定色塊的大小。SetBgColor及GetBgColor則是用來存取色塊顏色值。 另外Good.GenObj的定義也稍作調整。GenObj的第二個參數如果是指定一個小於等於0的值,也就是一個無效的值,則表示要建立一個色塊背景物件。 範例 大概說明一下上面看到的抓圖範例的程式。首先在關卡初始化時建立一堆測試物件。 math.randomseed(os.clock()) for i = 1,2000 do   local cb = Good.GenObj(-1, 0, 'TestBlock') end 這段Lua程式碼用來建立2000個用TestBlock控制行為的色塊物件(因為第二個參數不指定資源所以自動成為色塊物件)。 TestBlock定義如下。 TestBlock = {} TestBlock.OnCreate = function(param)   if (math.random(2) == 1) then     param.dirx = -1 * math.random(1...

很讚的遊戲編輯器

簡介 good是一個輕量的2D遊戲編輯器,中文名稱叫作很讚的遊戲編輯器! 剛開始的時候其實也沒有想的太多,只想到要作到可以用來編輯 鋤草機 這個遊戲的一個關卡就夠了。而現在也的確達到了這個目標。廢話不多說,我們直接開始,透過編輯一個簡單的遊戲關卡來看看good能作到什麼,也等於對good作一個很簡單的介紹。 開新專案 首先把good執行起來,可以看到如下圖所示的畫面。 點擊一下左側上半部的資源樹上的Project項目。可以看到資源樹下方的屬性檢視器跟著產生變化。 在Name欄位填上專案的名稱:鋤草機,其它欄位保留預設值不動。你可以發現到編輯器視窗的標題列產生了變化,標題變成了good - (鋤草機),同時工具列上的存檔鈕也致能了。點擊存檔鈕,給一個檔名把專案存到一個你想要的地方。你可以發現,編輯器的標題又改變了,這次加上了專案檔的路徑及檔案名稱。 新增圖形資源 接著我們要新增 鋤草機 需要使用到的圖形資源,一共是二張圖。點擊工具列上的新增圖形資源鈕叫出視窗介面。 Name欄位填不填無所謂,重點是File欄位。點擊File欄位最右側的鈕叫出開啟舊檔對話盒視窗,挑選我們想要加入的圖形檔案加入到專案裡。 點擊資源樹上的tex2,再點擊一下屬性檢視器上的KeyColor欄位。點擊KeyColor欄位後,在欄位的右側會出現一個小鈕,再點擊這個小鈕叫出顏色選擇介面,接著選擇RGB值為R:253 G:0 B:255的顏色值後按下確定。 以上的動作是因為我們的tex2需要使用到鏤空色的功能而作的鏤空色設定。而tex1(如下圖)只作為靜態背景圖,就不需要作鏤空色的設定。 這裡補充說明一下,每一個資源項目無論是那種類別都會有幾個共同的屬性。從屬性檢視器裡面可以看到最上面的Id以及Name屬性就是共用的屬性。Id是用來辨別不同資源的,每一個Id都是唯一的,對於Id這個屬性以後我們還會再提到。再來是Name屬性,這是個可有可無的欄位,也因此這個欄位也不需保證是唯一的。 編輯地圖 接下來點擊工具列上的新增地圖鈕叫出介面視窗。 我們現在要新增一個6X6個Tile的地圖,所以在Width及Height各填上6。每一個Tile的大小是32X32,這剛好是預設值。最後在Tileset的Texture欄位最右側點擊選擇圖形鈕叫出介面視窗來,選取剛剛加入的tex2圖形資源作為我們用來編輯地圖的Tiles...