• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            劍孤寒的小站

            人生的價值不是用時間,而是用深度去衡量的!
            posts - 75, comments - 290, trackbacks - 0, articles - 0

            《在Lua中使用枚舉型變量》
            轉載請注明出處:http://groups.google.com/group/jianguhan


            用lua來寫游戲腳本的確是一件很方便的事情,但是有時候需要用到枚舉類型時就有點麻煩了,因為lua里時沒有枚舉型變量這個東西的,所以要使用枚舉還 得自己轉換一下,我寫了一個函數用來做這種轉換:

            function CreatEnumTable(tbl, index)
                assert(IsTable(tbl))
                local enumtbl = {}
                local enumindex = index or 0
                for i, v in ipairs(tbl) do
                    enumtbl[v] = enumindex + i
                end
                return enumtbl
            end

            在需要用到枚舉變量的地方只要這樣用就行了:
            EnumTable =
            {
                "ET1",
                "ET2",
            }

            EnumTable = CreatEnumTable(EnumTable )
            print(EnumTable.ET1)
            print(EnumTable.ET2)

            輸出為:
            1
            2

            當然,也可以指定下標從多少開始,
            比如從10開始,只要把上面創建枚舉表的語句換成下面這樣就可以了:
            EnumTable = CreatEnumTable(EnumTable, 10)

            posted @ 2008-10-26 11:07 劍孤寒 閱讀(15640) | 評論 (2)編輯 收藏

            《在Lua中使用List 》
            轉載請注明出處:http://groups.google.com/group/jianguhan


            在《Programming in Lua》一書中提到了一個雙端隊列的實現方法,我把它拿來改進了一下用在了我正在制作的一個RPG游戲里,用起覺得 來還不錯,加了一個GetSize()來取得List的大小,這個在游戲制作中用處還是很大的^_^

            源代碼如下:
            CList = class()

            function CList:ctor()
                    self.m_list = { first = 0, last = -1 }
            end

            function CList:PushFront(value)
                    local first = self.m_list.first - 1
                    self.m_list.first = first
                    self.m_list[first] = value
            end

            function CList:PushBack(value)
                    local last = self.m_list.last + 1
                    self.m_list.last = last
                    self.m_list[last] = value
            end

            function CList:PopFront()
                    local first = self.m_list.first
                    if first > self.m_list.last then return nil end
                    local value = self.m_list[first]
                    self.m_list[first] = nil
                    self.m_list.first = first + 1
                    return value
            end

            function CList:PopBack()
                    local last = self.m_list.last
                    if self.m_list.first > last then return nil end
                    local value = self.m_list[last]
                    self.m_list[last] = nil
                    self.m_list.last = last - 1
                    return value
            end

            function CList:GetSize()
                    if self.m_list.first > self.m_list.last then
                            return 0
                    else
                            return math.abs(self.m_list.last - self.m_list.first) + 1
                    end
            end

            在最前面的那句CList = class() 這里使用了云風寫的一個class函數創建一個類,
            這個函數可以在云風的博客上找到,為了方便起見我就在這里先抄一下了:

            local _class={}

            function class(super)
                    local class_type={}
                    class_type.ctor=false
                    class_type.super=super
                    class_type.new=function(...)
                                    local obj={}
                                    do
                                            local create
                                            create = function(c,...)
                                                    if c.super then
                                                            create(c.super,...)
                                                    end
                                                    if c.ctor then
                                                            c.ctor(obj,...)
                                                    end
                                            end

                                            create(class_type,...)
                                    end
                                    setmetatable(obj,{ __index=_class[class_type] })
                                    return obj
                            end
                    local vtbl={}
                    _class[class_type]=vtbl

                    setmetatable(class_type,{__newindex=
                            function(t,k,v)
                                    vtbl[k]=v
                            end
                    })

                    if super then
                            setmetatable(vtbl,{__index=
                                    function(t,k)
                                            local ret=_class[super][k]
                                            vtbl[k]=ret
                                            return ret
                                    end
                            })
                    end

                    return class_type
            end

            posted @ 2008-10-26 11:06 劍孤寒 閱讀(6799) | 評論 (0)編輯 收藏

            前幾天在做游戲時碰到要做一個以漸變方式切換場景的特效,記得以前在RMXP中要看到過類似的特效,于是趕快把它翻出來看了看,發現效果還不錯。

                它的場景特效切換方法是:首先需要一個遮罩圖,這個圖的作用是根據時間和這個圖上灰度的值來設置切換圖的alpha值,具體的做法可以下載我寫的演示程序和源代碼,里面分別有最原始的操作像素實現這個特效的方法和使用shader來做這個特效的方法,這兩種方法的速度差別還是很大的,我更傾向于使用shader來做,另外,雖然這個演示程序是2D的,但是方法也可以原封不動的搬到3D中去^_^     下載

               

            最后放上截圖一張^_^

             

             

             

             

             

             

             

             

             

             

            posted @ 2008-10-26 11:03 劍孤寒 閱讀(669) | 評論 (1)編輯 收藏

            RPG游戲開發日志    下載Demo
             
            2008年6月28日

                最近工作仍然很忙,所以游戲制作進度還是很慢,現在已完成了系統菜單,戰斗系統也完成了一半了,等忙過這段時間,把戰斗系統寫完應該就可以更新一下Demo了。
            系統菜單:



             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

            戰斗系統:

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

            2008年3月15日

                由于工作比較忙,從開始制作這個游戲到現在差不多半年了才完成游戲的一些基本系統,做這個游戲占了我大部分業余時間,雖然很累,但是跟做游戲的樂趣相比也算不了什么了。

                這個游戲決定采用《天之痕》的素材來做,一來是因為它的素材即使在今天看來仍可算得上精美,另外一個原因是當年玩這個游戲時被深深的感動了一把,所以對這個游戲留下了深刻的印象。

                好了,閑話不多說,先上一張圖吧。

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

                《云城之夢》的地圖仍然使用格子來判斷行走和觸發劇情,腳本方面使用了現在在游戲制作行業開始流行的Lua語言,上圖中的對話系統就是用Lua寫的。下面為地圖編輯器:

             

             

               

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

                由于這個游戲使用的是我自己寫的Galaxy2D游戲引擎,而這個引擎又是基于D3D的,在比如顯示游戲大地圖的時候可能會因為紋理過大而顯卡不支持出現問題,為了解決這個問題,我專門針對大尺寸紋理寫了一個ggeImage類,在內部把大紋理拆成一些小紋理,并實現自動管理和拼接,這樣多大的地圖也不怕了。

                接下來看看明暗效果和粒子效果吧,在《天之痕》里走到陰影下人物會變暗,走到窗戶旁會被照亮,這個在當時的游戲中是很少見的,加了明暗效果以后,人物跟場景結合在一起的感覺就更明顯了,而粒子特效可以試場景顯得更加真是生動。

               

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

                然后是游戲中的關鍵字顯示,這個作為給玩家的提示還是很必要的,由于這個功能比較有用,所以我把這個功能做到了Galaxy2D引擎里,這樣在顯示關鍵字的時候直接在關鍵字前面加上一個標記就好了。

             

              

                最后是對話系統,算是RPG游戲中相對來說比較重要的系統了吧。

             

             

            posted @ 2008-10-25 22:17 劍孤寒 閱讀(421) | 評論 (0)編輯 收藏

            Galaxy2D Game Engine 2.3 下載

                             GUI演示                                                 MFC演示

              

             

                         粒子編輯器                                             GUI布局器

             

            版權聲明:
             
             1.
            本軟件著作權歸沈明所有,保留所有權利。任何個人或團體可以免費使用引擎開發非商業用途的游戲和程序,可以修改和使用公開發布的源代碼,同時可以任意轉載復制本引擎,但必須保證復制的完整性。
             
             2.
            未經本人授權禁止利用本引擎從事任何商業活動,包括利用引擎開發商業游戲,出版引擎的源代碼及其他相關資源。
             
             3. 不得對本游戲引擎進行反向工程、反向編譯或反匯編,不得對本引擎所含的代碼庫及附帶的工具程序作任何修改,破壞引擎的完整性。
             
             4. 本游戲引擎是免費軟件,對于由于使用本引擎引起的任何不良后果,用戶必須自己承擔風險,如果用戶使用本引擎用于任何非法目的,用戶必須獨立承擔由此帶來的法律責任。

             

            引擎說明:

             Galaxy2D游戲引擎是一個基于D3D硬件加速的2D游戲引擎,主要特性有:
             
            1.  支持高性能的圖形渲染及特殊效果(如:縮放、旋轉、透視、alpha混合等)
             2.  支持常用音頻格式(*.mid,*.wav,*.ogg),提供高效的并發播放等功能
             3.  支持常用圖片格式(*.bmp, *.png, *.jpg, *.tga, *.dds),支持alpha通道自動混合等
             4.  提供高性能的字體渲染模塊,支持中文等字體
             5.  提供擴展圖像模塊,可支持任意尺寸圖像
             6.  提供數據管理模塊,支持直接zip包的讀取
             7.  提供資源管理模塊,簡化游戲中的資源管理
             8.  提供高效的粒子系統,并有粒子編輯器
             9.  提供易用的GUI模塊,并有GUI布局器
             10. 支持多種格式的視頻文件播放
             
             運行環境:
             
            Windows 98/2000/NT/ME/XP
             DirectX 9.0c
             
             聯系方式:
             
            主頁地址: http://groups.google.com/group/jianguhan
             電子郵箱: jianguhan@126.com 

             

             

            更新記錄:

            2.3
            修改粒子系統處理回調
            ggeFsmManager添加函數ReturnLastState()

            2.2
            工具軟件做了一些小調整以便于使用
            修改創建資源失敗內存泄露問題
            常用擴展類添加Copy()和Clone()函數
            修正VS2005兼容性問題
            添加LuaClass模塊用以導出類到Lua腳本中
            粒子系統添加ggeParProcessHandler,可操作單個粒子運動

            2.1
            紋理模塊增加鎖定渲染目標功能
            紋理模塊增加丟失設備等情況時,自動保存和載入渲染目標紋理上的圖像
            紋理模塊添加FillColor()函數用以填充紋理
            添加Resource_AddPath()函數設置資源搜索路徑
            增加Shader模塊,可用HLSL編寫Shader程序,高效快速的實現游戲中的某些特效
            字體模塊添加SetCharSpace()函數用以設置字間距
            字體模塊添加SetShadowMode()函數用以設置字體陰影
            修正與MFC結合使用時,設備丟失不能重置的問題
            視頻播放添加Video_Pause()和Video_GetPlayingTime()函數

             
            2.0
            交換鏈模塊添加SetValidRect函數以便更好的與MFC結合使用
            游戲程序框架增加FSM類

             

            1.22
            添加一個游戲程序框架,簡化游戲開發過程
            修改音效模塊播放代碼,提高多播性能
            音效模塊添加Sound_PauseAll()/Sound_ResumeAll()/Lock()/UnLock()函數

             

            1.21

            修正LoadLayout函數不能從資源文件讀取布局文件的問題
            ggeGUIInputBox添加Center函數
            GUI管理器和控件添加Reset和SetColor函數
            修改資源腳本的字符串定義,使其更便于使用
            修正讀取空資源腳本出錯的問題

            修改字體類緩存管理算法,提高渲染效率
            ggeVector類添加Clamp函數
            精靈類SetFlip函數添加hotSpot參數,指示是否翻轉參考點

            1.20
            添加GGE_TEXTURESIZE用以在系統啟動時檢測最小紋理尺寸是否滿足要求
            字體類添加SaveState和ReloadState函數用以保存/重載字體狀態
            GUI模塊添加ggeGUIWindow和ggeGUIImage控件
            添加GUI布局器,以便于GUI控件布局

             

            1.19
            修正Graph_GetRenderTarget()取得渲染目標失敗錯誤
            重寫音效模塊,提高音效并發播放效率
            字體類添加SetLineWidth()函數設置行寬,當字符串總寬度超過該值時自動換行
            字體類添加顏色腳本,可在字符串中可直接設置某段文字顯示顏色
            重寫資源管理類的資源腳本


            1.18
            修正載入多個不同音樂文件時非法操作問題
            修正檢測音樂文件是否播放失敗問題
            取消消息監聽器,用消息處理函數取代
            重寫粒子編輯器
            添加
            Input_IsMouseOver()函數,檢測鼠標是否在窗體上
            添加Input_GetChar()函數,返回當前輸入的字符或字符串,支持中文輸入法
            添加ggeGUIInputBox控件,支持中/英文輸入,支持全屏/窗口模式
            添加ggeResManager類對資源進行管理

            1.17
            添加對配置信息(INI)文件的操作函數

            1.16
            字體類添加GetCharNum函數
            ggeGUIManager添加無鼠標導航模式(GGEGUI_NONAVMOUSE)
            紋理類支持dds壓縮紋理格式

            1.15
            修正ggeGUIButton控件紋理坐標設置錯誤
            修改了GUI和動畫類中的中的Update函數
            修改了ggeGUIButton對消息的響應方式,只有在控件范圍內釋放鼠標左鍵才認為在該區域按下鼠標

            1.14
            從Font類移除SetBufferSize,Font類內部自動調整緩沖區
            添加Image類,支持任意尺寸圖像

            1.13
            修改了一些Input函數的函數名
            添加GUI控件,增加ggeGUIListBox類

            1.12
            修正字體顯示位置誤差
            Input_GetMousePos和Input_SetMousePos的參數修改為float型

            1.11
            修正有時設置窗口標題失敗問題
            修正兩次執行Graph_BeginScene()函數時,畫圖失敗問題

            1.10
            重新設計引擎架構
            重寫音頻播放模塊
            采用動態補償技術重寫幀率控制模塊
            修正粒子系統的一些小Bug
            修正渲染交換鏈渲染圖形失敗問題

            1.03
            Font類添加ResetBufferSize函數
            添加Input_GetKey函數
            添加Input_IsMouseUp函數
            添加Input_IsKeyUp函數

            1.02
            修改渲染模塊,提高了渲染效率
            Font類添加SetCharNum函數

            1.01
            修正字體間距Bug
            修正粒子移動Bug
            修正設置渲染目標后畫面閃耀問題

            posted @ 2008-10-25 21:58 劍孤寒 閱讀(589) | 評論 (0)編輯 收藏

            僅列出標題
            共8頁: 1 2 3 4 5 6 7 8 
            日韩人妻无码精品久久免费一| 亚洲国产成人久久综合区| 久久亚洲精品成人AV| 久久精品人成免费| 77777亚洲午夜久久多喷| 久久播电影网| 久久AV高清无码| 久久中文精品无码中文字幕| 亚洲AV成人无码久久精品老人| 九九久久99综合一区二区| 青春久久| 国产毛片久久久久久国产毛片| 久久91精品国产91| 国产精品伊人久久伊人电影| 欧美丰满熟妇BBB久久久| 久久精品亚洲精品国产欧美| 国内精品久久久久久久97牛牛| 久久精品亚洲乱码伦伦中文| 精品久久久久久久| 久久久久久久人妻无码中文字幕爆| 人妻少妇精品久久| 国产毛片久久久久久国产毛片| 青草国产精品久久久久久| 亚洲国产天堂久久久久久| 久久久久18| 久久免费视频一区| 精品无码人妻久久久久久| 亚洲AV日韩精品久久久久久| 久久综合伊人77777| 久久青青草原精品国产不卡| Xx性欧美肥妇精品久久久久久| 国内精品伊人久久久久| 无码人妻精品一区二区三区久久久| 狠狠色丁香婷婷久久综合| 精品国产热久久久福利| 999久久久国产精品| 国产精自产拍久久久久久蜜| 国产69精品久久久久99| 久久无码国产| 久久亚洲精品成人无码网站| 东方aⅴ免费观看久久av|