2012年1月5日 星期四

程式準則

這一份是公司開發新引擎及未來專案所要使用的程式準則,也是個人長年累積下來的習慣,這當中經過不斷的學習與改進才有現在的樣貌,還有很多C++的技巧都在內文推薦的書籍中都有,這裡只列出比較需要注意的地方。

程式準則

本文經公司主管同意發佈.

2011年8月18日 星期四

Ogre3D v1.7 與 OpenGL ES 1.1 (2)

最近因為升級了其它的 ThirdParty 套件的版本所以 Ogre 也必須要 Rebuild, 只是 OpenGL ES 忘了當初怎麼 Build 因此又花了一些時間研究, 順便做一下筆記, 免得下次要 Rebuild Ogre 時又忘了.

Ogre 1.7.x 只支援 OpenGL ES 1.1, 所以想使用 OpenGL ES 2.0 的話則必須使用 Ogre 1.8, Ogre 1.8 官方目前還在 Debug 中, 所以只好先使用 Ogre 1.7.x + OpenGL ES 1.1 的組合, 以下將說明方法.

1. 至 PowerVR 的網站下載 OpenGL ES SDK, 要先加入會員.

2. 在 Khronos OpenGL ES 1.1 SDKs 中選擇 PC Emulation Windows 7/Vista/XP - OpenGL ES 1.1, 如果方便的話, 也可以將其它平台及版本的套件全部下載, 還有工具及說明文件也一併下載.

3. 安裝 OpenGL ES SDK, 等待安裝完成後就可以進行下一步.

4. 在其它地方中先建立一個 Dependencies 目錄, 並在此目錄下建立三個子目錄

Dependencies\Bin
Dependencies\include
Dependencies\lib

5. 打開 SDK 安裝目錄, 然後切換目錄至 Imagination Technologies\POWERVR SDK\OGLES_WINDOWS_X86EMULATION_2.08.28.0634\Builds\OGLES

將 Include 目錄下所有的檔案複製到 Dependencies\include
將 WindowsX86\Lib 目錄下所有的 .lib 檔複製到 Dependencies\lib
將 WindowsX86\Lib 目錄下所有的 .dll 檔複製到 Dependencies\bin

複製完後應該會有如下列的檔案

Dependencies\Bin
Dependencies\Bin\Debug
Dependencies\Bin\Debug\libEGL.dll
Dependencies\Bin\Debug\libgles_cm.dll
Dependencies\Bin\Release
Dependencies\Bin\Release\libEGL.dll
Dependencies\Bin\Release\libgles_cm.dll

Dependencies\include
Dependencies\include\EGL
Dependencies\include\EGL\egl.h
Dependencies\include\EGL\eglext.h
Dependencies\include\EGL\eglplatform.h
Dependencies\include\GLES
Dependencies\include\GLES\egl.h
Dependencies\include\GLES\gl.h
Dependencies\include\GLES\glext.h
Dependencies\include\GLES\glplatform.h
Dependencies\include\KHR
Dependencies\include\KHR\khrplatform.h

Dependencies\lib
Dependencies\lib\Debug
Dependencies\lib\Debug\libEGL.lib
Dependencies\lib\Debug\libgles_cm.lib
Dependencies\lib\Release
Dependencies\lib\Release\libEGL.lib
Dependencies\lib\Release\libgles_cm.lib

6. 將 Dependencies 複蓋到 Ogre 的 Dependencies 目錄

7. 編譯的時候會有 Error, 修改 Code 方法如下,
在 GLESTextureBuffer::GLESTextureBuffer 中, 將 pow(2, level) 改成 (int)pow(2.0f, level)

2011年8月11日 星期四

[筆記] 第三方程式庫 Build 方式

可能年紀大了所以有點失智, 特此筆記一下幾個比較複雜的第三方程式庫 Build 方式, 不定時更新.

========================================
BOOST

1. bootstrap.bat

2. 設定

有 STLport
a. boost_1_46_1\tools\build\v2\user-config.jam
修改 using msvc : 9.0 ; (# 號要拿掉)

b. bjam --toolset=msvc --build-type=complete stage

無 STLPort
a. boost_1_46_1\tools\build\v2\user-config.jam
修改 using msvc : 9.0 ; (# 號要拿掉)

b. bjam --toolset=msvc

========================================
JPEG

VS2008
1. nmake /f makefile.vc setup-vc6

2. Debug: nmake /f makefile.vc
    Release : nmake /f makefile.vc nodebug=1

VS2010
1. nmake /f makefile.vc setup-vc10

2. Debug: nmake /f makefile.vc
    Release : nmake /f makefile.vc nodebug=1

========================================
wxWidgets

D:\ThirdPartyBuild\wxWidgets-2.9.1\build\msw
nmake -f makefile.vc
nmake -f makefile.vc BUILD=release
nmake -f makefile.vc UNICODE=0
nmake -f makefile.vc UNICODE=0 BUILD=release

copy .\wxWidgets\Include\msvc\wx\setup.h .\wxWidgets\Include\wx\setup.h

2011年8月2日 星期二

原始碼排版工具 - Artistic Style

※ 今天上去看了一下發現有更新, 下載後順便把幾年寫的教學給 PO 上來, 也順手寫一下介紹.
※ 新版因為格式有變更, 所以更新參數.

Artistic Style 是什麼? Artistic Style 是一套 OpenSource 的原始碼排版工具, 它會依照你所設定的格式參數將你的原始碼做好排版的工作, 讓你的程式碼看起來整齊劃一, 當然, 如果你的程式碼亂的太誇張還是必須自行手動才行.

Artistic Style 的格式說明在官網的說明中寫的很清楚, 若很懶的看的話也可以使用我的格式來使用, 尤於 Artistic Style 是屬於命令列的工具, 所以在 Visual Studio 中想使用它的話必須透過一些方法來達成, 方法及我使用的格式如下:


1. 從官網下載需要的版本, 並解開壓縮檔放置在某個目錄下.

2. 開啟 Visual Studio 裡的 "外部工具"

3. 加入一個新的, 並如下圖所示設定, 參數請注意大小寫 (或將下方剪下然後貼上)
標題:Artistic Style 在 Visual Studio 中的按鈕名稱, 可以取 AStyle 就好.
命令:指向 Artistic Style 的執行檔.
引數:即格式, 我使用的格式如下, $(ItemFileName)$(ItemExt) 表示目前作用的完整檔名
(新版本) --style=ansi -T4 -b -S -K -w -Y -M -m -p -H -y -c -E -n $(ItemFileName)$(ItemExt)
初始目錄:這個設定成目前作用的檔案目錄 $(ItemDir)

4. 先在一般的工具列上按下滑鼠右鍵, 然後選則自訂

5. 當自訂的視窗出現後, 在開啟工具選單, 將外部命令N (N 的順序如步驟 2 所示, 請自行由上往下數一數) 拖曳至其它工具列即可然後離開自訂視窗後, 外部命令N 的按鈕就會變成 AStyle 按鈕.


6. 開啟任意檔案 (.cpp .h), 按下工具列上 AStyle的按鈕, 程式碼即會依照我們指定的參數排版.


2011年7月18日 星期一

MMORPG.中的普通攻擊.失敗的例子

不久前玩了一套 MMORPG, 剛開始玩的時候照著提示過任務, 因為怪物數量少還不覺得有點怪異, 然後玩了一會兒後發覺, 咦? 用技能打了那麼多怪 MP 怎麼沒有減少? 原來一直都是使用消費 0MP 的技能打怪, 然後想把普通攻擊 (以下簡稱普攻) 給拉到快捷列上來, 可是在 UI 裡找了很久都找不到, 就覺得很奇怪怎麼沒有普攻, 是不是快捷鍵忘了放上去, 經過詢問後得知原來不是, 得到的回答是 “有一招消費 0MP 的技能就是普攻”, 瞬時之間……無語了.

好的, 這套遊戲沒有普攻沒關係, 算是它的一個特色, 可是再玩了一會兒後感覺並不是這麼一回事, 這遊戲的打怪的步調異常奇怪, 如果今天我玩的是法系職業或許會感覺不出來, 不過我玩的卻是肉博系的職業, 這感覺就非常的明顯, 後來也有玩了一隻牧師職業, 還是覺得打怪的感覺就是不太對, 所以在戰鬥上就花了時間去分析它, 造成打怪的步調異常奇怪有很多項, 不過本篇的重點就先著重在普攻.

一般的遊戲的普攻都是以手持的武器做揮動攻擊, 如果沒有裝備武器的話則是以空拳的方式攻擊, 不過這遊戲的普攻是使用消費 0MP 的技能, 是不是使用武器直接敲打砍殺怪物不是這遊戲的普攻怪異的重點, 重點是普攻的時間問題.

這遊戲的普攻冷卻時間是 2秒鐘, 從出招, 播放特效, 擊中敵人後讓敵人受傷需要花費約 1.50秒, 接著收招約 0.50 秒, 然後你才可以再出下一招, 也就是說你想讓敵人受傷除了有瞬發技能之外, 最短的普攻時間也要 1.50 秒, 其實真正的普攻不是只有 “消費 0MP” 這樣的意義而已, 而是能夠在技能冷卻時間裡做出額外的攻擊, 甚至在某些時刻還有補刀的效果, 但是在這遊戲中完全不是這麼一回事.

一般的普攻都是設計少於 1 秒之內就必須完成, 從出招, 擊中, 收招動作都必須在這個時間內完成, 然後就可以再出下一招普攻或是其它技能, 有些遊戲普攻的冷卻時間會稍微再拉長一點點點, 不過擊中敵人的時間仍然保持普攻應該有的流暢感, 也就是說擊中敵人的時間點絕對不會超過 1秒, 甚至在 0.x 秒內就必須擊中敵人, 除此之外, 貼心一點的遊戲在某些設計上是當你發動技能攻擊後, 普攻即會自動發動, 這普攻會在技能的空擋時間自動使用 (如果玩家沒有按其它攻擊技能的話), 玩家不需要一直猛按著普攻, 只要專注在技能的配招上即可.

這個時間點的問題很大, 當怪物明明只剩一點點血的時候, 玩家卻必須再使用 1.50 秒的普攻來打擊敵人才能讓敵人死亡, 不僅如此, 這 2秒冷卻時間的普攻和其它因素造成了遊戲的戰鬥節奏就是慢慢慢, 一點都沒有戰鬥應該有的爽快感, 更不用提其它戰鬥上的設計缺失, 從點怪, 鍵盤按鍵, 技能時間, 技能種類…等等全部都是問題, 整個遊戲玩起來的感覺就是拖泥帶水的不順暢,

這套 MMORPG如果我有參與產品檢討會的話, 我個人大概就可以列出一大張的產品改進魚骨圖來, 因為不僅在普攻上有問題, 整個戰鬥都是有問題, 哦~不只, 是整個遊戲的設計都有問題, 這遊戲一點都不像是有製作 MMORPG 經驗的公司所做出來的產品, 這實著是讓我相當的意外, MMORPG 製作經驗豐富的公司怎麼會做出這樣的一套產品來.