會員登入 新使用者?立即註冊

這是一個充滿夢想的地方!致力於創造簡單易用、媲美商業遊戲等級的玩家版3D線上遊戲創作平台!!!(研發中)

關閉
勇者們!一起創作心目中的遊戲世界吧!!! 我要留言

最新文章

分類: 研發紀錄
2009/06/03 00:50





我的動畫腳本語言範例如下:

;===============================================================================
; 腳本名稱 - 一般的顯示圖片

;===============================================================================

; 初始化一個動畫 (動畫編號, 圖檔編號, X, Y, 延遲, 每次的Alpha加值)
CREATE_ANI 0, 0, P0, P1, 10, 10

; 自動播放限定張數動畫 (動畫編號, 起始圖號, 終止圖號)
PLAY_ANI_RANGE 0, 0, 3

; 等待動畫播放完畢 (動畫編號)
WAIT_ANI 0

WAIT 350

; 淡出
FADE_OUT 10 (每次淡出的減值)

END





;===============================================================================
; 腳本名稱 - 單一腳本多動畫
;===============================================================================

; 初始化一個動畫 (動畫編號, 圖檔編號, X, Y, 延遲, 每次的Alpha加值)
CREATE_ANI 0, 1, 0, 0, 10, 10

; 自動播放限定張數動畫 (動畫編號, 起始圖號, 終止圖號)
PLAY_ANI_RANGE 0, 0, 3

; 等待動畫播放完畢 (動畫編號)
WAIT_ANI 0



; 初始化一個動畫 (動畫編號, 圖檔編號, X, Y, 延遲)
CREATE_ANI 1, 2, 508, 315, 10
CREATE_ANI 2, 2, 496, 330, 10
CREATE_ANI 3, 2, 527, 337, 10

; 自動播放限定張數動畫 (動畫編號, 起始圖號, 終止圖號)
PLAY_ANI_RANGE 1, P0, P0
PLAY_ANI_RANGE 2, P1, P1
PLAY_ANI_RANGE 3, P2, P2



WAIT 90

; 淡出
FADE_OUT 10 (每次淡出的減值)

END





;===============================================================================
; 腳本名稱 - 用腳本移動圖形位置
;===============================================================================

; 初始化一個動畫 (動畫編號, 圖檔編號, X, Y, 延遲)
CREATE_ANI 0, 1, 297, 177, 4

; (-1等於無限循環)
SET_COUNT -1

; 自動播放限定張數動畫 (動畫編號, 起始圖號, 終止圖號)
PLAY_ANI_RANGE 0, P0, P0

SET_A 0
; 淡入
FADE_IN 30 (每次淡入的加值)

PLAY_SOUND 7

ADD_Y 2
WAIT 3
ADD_Y 2
WAIT 3
ADD_Y 2
WAIT 3
ADD_Y 2
WAIT 3
ADD_Y -8
WAIT 3

ADD_Y 2
WAIT 3
ADD_Y 2
WAIT 3
ADD_Y -4
WAIT 3

ADD_Y 2
WAIT 3
ADD_Y -2
WAIT 3

CALL_FUNC 2 ; 通知內部移動已停止

; 等待動畫播放完畢 (動畫編號)
WAIT_ANI 0

; 淡出
FADE_OUT 10 (每次淡出的減值)

END


下述二個連結是我的動畫腳本語言程式碼:
AV_Script-h.htm
AV_Script-cpp.htm



以前我寫動畫控制的方式,是在程式內用一種奇妙的方式來編排動畫控制。
這是用long的陣列來排列動畫流程。是以前我的主管使用的方式,我看到後,
覺得很棒,我就自己實作一個這樣的動畫控制類別。
動畫表格虛擬碼如下:
long ani_process_table[ ] =
{
    ANI_COMMAND__CREATE_ANI, 0, 0, 100, 200, 10, 10,
    ANI_COMMAND__PLAY_ANI_RANGE, 0, 0, 3,
    ANI_COMMAND__WAIT_ANI, 0,
    ANI_COMMAND__WAIT, 350,
    ANI_COMMAND__CALL_FUNC, (long)gAniExtraFunc, // 重點:流程中可以呼叫函式喔
    ANI_COMMAND__FADE_OUT, 10,
    ANI_COMMAND__END,
};

而我現在設計的動畫腳本語言,其實也只是將原設計外移到腳本檔案中而已。
至於功能的多寡,則是需要多少功能就先實現多少功能。
還沒用到的功能。。。就留到以後需要時再做吧!

下述就是我已設計的動畫腳本命令簡介:
    ANI_COMMAND__CREATE_ANI, // 一開始一定得初始化一個動畫物件,之後才能控制它。
    ANI_COMMAND__CREATE_RECT, // 這是初始化一個矩形色塊物件。
    ANI_COMMAND__CTRL_ANI_START, // 保留。(未完成)
    ANI_COMMAND__CTRL_ANI_END,   // 保留。(未完成)
    ANI_COMMAND__SET_ANI_RANGE,  // 設定動畫顯示圖片張數(動畫編號,圖片開始值,圖片結束值)
    ANI_COMMAND__PLAY_ANI_RANGE, // 同ANI_COMMAND__SET_ANI_RANGE,但會立即播放。
    ANI_COMMAND__PLAY_ANI,       // 開始播放動畫,圖片開始值會歸0。
    ANI_COMMAND__CONTINUE_PLAY_ANI, // 繼續播放動畫,圖片開始值不會歸0。
    ANI_COMMAND__WAIT_ANI,       // 等待一個動畫播放完畢,腳本才會往下移動。
    ANI_COMMAND__WAIT_ALL_ANI,   // 等待此腳本所有動畫播放完畢,腳本才會往下移動。
    ANI_COMMAND__WAIT,           // 單純的等待延遲。
    ANI_COMMAND__BREAK,          // 中斷腳本流程,並將流程往下移動。
    ANI_COMMAND__PLAY_SOUND,     // 播放音效。
    ANI_COMMAND__SET_ANI,        // 指定現在要單獨控制並設定參數的動畫物件。
    ANI_COMMAND__SET_IMAGE,      // 承上,用ANI_COMMAND__SET_XXX這一系列的功能來設定。
    ANI_COMMAND__SET_POS,        // 設定螢幕上的x,y座標。
    ANI_COMMAND__SET_DELAY,      // 設定動畫換張延遲最大值。
    ANI_COMMAND__SET_COLOR,      // 設定R,G,B,A。
    ANI_COMMAND__SET_R,          // 設定Red
    ANI_COMMAND__SET_G,          // 設定Green
    ANI_COMMAND__SET_B,          // 設定Blue
    ANI_COMMAND__SET_A,          // 設定Alpha
    ANI_COMMAND__SET_PIC_INDEX,  // 設定現在顯示圖片張號
    ANI_COMMAND__SET_COUNT,      // 設定動畫播放重複次數
    ANI_COMMAND__SET_LAYER,      // 設定動畫所在階層。(上中下)
    ANI_COMMAND__SHOW_PIC,       // 設定現在顯示圖片張號,並馬上顯示。
    ANI_COMMAND__ADD_X,          // 增加X值。可設正負值,能讓動畫移動。
    ANI_COMMAND__ADD_Y,          // 增加Y值。可設正負值,能讓動畫移動。
    ANI_COMMAND__FADE_IN,        // 讓動畫淡入,慢慢顯示出來。
    ANI_COMMAND__FADE_OUT,       // 讓動畫淡出,慢慢消失不見。
    ANI_COMMAND__CALL_FUNC,      // 呼叫程式中指定的函式,以實現難以做到的功能。
    ANI_COMMAND__CALL_SCRIPT,    // 呼叫另一個腳本,可多腳本同時執行。(未完成)
    ANI_COMMAND__END_ANI,        // 直接刪除動畫。
    ANI_COMMAND__END,            // 腳本結束。


未完待續...



回應(5) 引用(0)
分類: 研發紀錄
2009/04/27 21:14

這次,來分享一下一個旗標(flag)資訊合成的小技巧。也就是善用BYTE的每一個bit (總用有8bit可用)。網路遊戲程式中,常常會傳輸各種資訊,尤其是旗標資訊也是一堆。若是將各種旗標資訊都合成到 ...《 詳全文

回應(8) 引用(0)
分類: OGRE3D
2009/03/25 15:17

畫面中...單獨的身體、盾牌和一個紅色材質方塊,皆是在程式內動態複製動畫的方式產生的!這段時間,我研究Ogre的進度有點慢...當然,主因是工作繁忙嚕...不過我仍有找時間研究啦~這次研究的 ...《 詳全文

回應(3) 引用(0)
分類: 經驗分享
2009/02/20 05:31

最近翻出一個有價值的東西,可以給想朝專業遊戲程式設計的人參考的東西。就是遊戲事件驅動框架!當初這是要教我一個企劃朋友寫程式,所做的一個示範,讓他學習用的。不過,沒多久...他仍是放棄 ...《 詳全文

回應(7) 引用(0)
分類: 程式技巧
2009/01/24 14:45

我認為精通活用資料結構是非常重要的內功!(我也還在學...)我設計的記憶體池管理類別,就是善用資料結構的產物。(哈~自賣自誇) 任何種類的記憶體池管理類別都是為了解決某一種需求而 ...《 詳全文

回應(18) 引用(0)
分類: 源碼下載
2008/12/31 18:08

在我早期寫windows程式時,我總是喜歡使用『動態配置記憶體』。需要記憶體的時候,就跟作業系統new一下即可,不用時則delete歸還系統。後來發現,常常這樣搞的話,會讓作業系統容易發生『記憶體 ...《 詳全文

回應(14) 引用(0)
分類: 程式技巧
2008/12/11 20:15

這次就來分享一個很小的技巧!其實,只是將多緒程式會用到的CriticalSection包裝成一個方便使用的類別。使用時就不需要記住又臭又長的函式名稱,只需要簡單使用Locker物件即可。程式碼如下:* A ...《 詳全文

回應(3) 引用(0)
分類: OGRE3D
2008/11/25 11:48

畫面上的模型都是使用AV_ModelAnimation來讀入並播放的喔 這是穿上和卸下盔甲的對照組!這幾個月,花了很多時間在研究用Ogre來表現紙娃娃動畫效果。目前略有小成,我就將之整理後,包裝成一個 ...《 詳全文

回應(5) 引用(0)
分類: 程式技巧
2008/10/30 22:57

多執行緒(multi-thread) !一個讓程式師又愛又恨的技術!愛的是....它能善用單CPU和人機介面操作時的閒置時間,藉此加快程式運作。    也能利用現在最夯的趨勢:多核心CPU,大幅增進程式效 ...《 詳全文

回應(6) 引用(0)
分類: OGRE3D
2008/10/15 00:54

要使用Ogre3D,通常也需要一併學習如何讀取XML...所以我花了一點時間研究它...而我最想知道的就是如何尋訪所有節點資訊,只是我花了一天才研究出來... =.= (搞太久嚕吧)程式碼如下:/* Auto-gen ...《 詳全文

回應(7) 引用(0)

統計資料

  • 今日人數:42
  • 累計人數:72572
  • 發表文章:71
  • 相片數量:78
  • 回應數量:386

部落格觀察

    Blog Look Score and Rank

     

    目前在線人數:

    who's online
雅虎資訊 版權所有 © 2009 Yahoo! Taiwan All Rights Reserved
「本服務設有管理員」 服務條款 隱私權政策