• <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>

            劍孤寒的小站

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

            《在Lua中使用枚舉型變量》
            轉(zhuǎn)載請(qǐng)注明出處:http://groups.google.com/group/jianguhan


            用lua來(lái)寫(xiě)游戲腳本的確是一件很方便的事情,但是有時(shí)候需要用到枚舉類(lèi)型時(shí)就有點(diǎn)麻煩了,因?yàn)閘ua里時(shí)沒(méi)有枚舉型變量這個(gè)東西的,所以要使用枚舉還 得自己轉(zhuǎn)換一下,我寫(xiě)了一個(gè)函數(shù)用來(lái)做這種轉(zhuǎn)換:

            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

            當(dāng)然,也可以指定下標(biāo)從多少開(kāi)始,
            比如從10開(kāi)始,只要把上面創(chuàng)建枚舉表的語(yǔ)句換成下面這樣就可以了:
            EnumTable = CreatEnumTable(EnumTable, 10)

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

            《在Lua中使用List 》
            轉(zhuǎn)載請(qǐng)注明出處:http://groups.google.com/group/jianguhan


            在《Programming in Lua》一書(shū)中提到了一個(gè)雙端隊(duì)列的實(shí)現(xiàn)方法,我把它拿來(lái)改進(jìn)了一下用在了我正在制作的一個(gè)RPG游戲里,用起覺(jué)得 來(lái)還不錯(cuò),加了一個(gè)GetSize()來(lái)取得List的大小,這個(gè)在游戲制作中用處還是很大的^_^

            源代碼如下:
            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() 這里使用了云風(fēng)寫(xiě)的一個(gè)class函數(shù)創(chuàng)建一個(gè)類(lèi),
            這個(gè)函數(shù)可以在云風(fēng)的博客上找到,為了方便起見(jiàn)我就在這里先抄一下了:

            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 劍孤寒 閱讀(6820) | 評(píng)論 (0)編輯 收藏

            前幾天在做游戲時(shí)碰到要做一個(gè)以漸變方式切換場(chǎng)景的特效,記得以前在RMXP中要看到過(guò)類(lèi)似的特效,于是趕快把它翻出來(lái)看了看,發(fā)現(xiàn)效果還不錯(cuò)。

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

               

            最后放上截圖一張^_^

             

             

             

             

             

             

             

             

             

             

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

            RPG游戲開(kāi)發(fā)日志    下載Demo
             
            2008年6月28日

                最近工作仍然很忙,所以游戲制作進(jìn)度還是很慢,現(xiàn)在已完成了系統(tǒng)菜單,戰(zhàn)斗系統(tǒng)也完成了一半了,等忙過(guò)這段時(shí)間,把戰(zhàn)斗系統(tǒng)寫(xiě)完應(yīng)該就可以更新一下Demo了。
            系統(tǒng)菜單:



             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

            戰(zhàn)斗系統(tǒng):

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

            2008年3月15日

                由于工作比較忙,從開(kāi)始制作這個(gè)游戲到現(xiàn)在差不多半年了才完成游戲的一些基本系統(tǒng),做這個(gè)游戲占了我大部分業(yè)余時(shí)間,雖然很累,但是跟做游戲的樂(lè)趣相比也算不了什么了。

                這個(gè)游戲決定采用《天之痕》的素材來(lái)做,一來(lái)是因?yàn)樗乃夭募词乖诮裉炜磥?lái)仍可算得上精美,另外一個(gè)原因是當(dāng)年玩這個(gè)游戲時(shí)被深深的感動(dòng)了一把,所以對(duì)這個(gè)游戲留下了深刻的印象。

                好了,閑話不多說(shuō),先上一張圖吧。

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

                《云城之夢(mèng)》的地圖仍然使用格子來(lái)判斷行走和觸發(fā)劇情,腳本方面使用了現(xiàn)在在游戲制作行業(yè)開(kāi)始流行的Lua語(yǔ)言,上圖中的對(duì)話系統(tǒng)就是用Lua寫(xiě)的。下面為地圖編輯器:

             

             

               

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

                由于這個(gè)游戲使用的是我自己寫(xiě)的Galaxy2D游戲引擎,而這個(gè)引擎又是基于D3D的,在比如顯示游戲大地圖的時(shí)候可能會(huì)因?yàn)榧y理過(guò)大而顯卡不支持出現(xiàn)問(wèn)題,為了解決這個(gè)問(wèn)題,我專門(mén)針對(duì)大尺寸紋理寫(xiě)了一個(gè)ggeImage類(lèi),在內(nèi)部把大紋理拆成一些小紋理,并實(shí)現(xiàn)自動(dòng)管理和拼接,這樣多大的地圖也不怕了。

                接下來(lái)看看明暗效果和粒子效果吧,在《天之痕》里走到陰影下人物會(huì)變暗,走到窗戶旁會(huì)被照亮,這個(gè)在當(dāng)時(shí)的游戲中是很少見(jiàn)的,加了明暗效果以后,人物跟場(chǎng)景結(jié)合在一起的感覺(jué)就更明顯了,而粒子特效可以試場(chǎng)景顯得更加真是生動(dòng)。

               

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

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

             

              

                最后是對(duì)話系統(tǒng),算是RPG游戲中相對(duì)來(lái)說(shuō)比較重要的系統(tǒng)了吧。

             

             

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

            Galaxy2D Game Engine 2.3 下載

                             GUI演示                                                 MFC演示

              

             

                         粒子編輯器                                             GUI布局器

             

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

             

            引擎說(shuō)明:

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

             

             

            更新記錄:

            2.3
            修改粒子系統(tǒng)處理回調(diào)
            ggeFsmManager添加函數(shù)ReturnLastState()

            2.2
            工具軟件做了一些小調(diào)整以便于使用
            修改創(chuàng)建資源失敗內(nèi)存泄露問(wèn)題
            常用擴(kuò)展類(lèi)添加Copy()和Clone()函數(shù)
            修正VS2005兼容性問(wèn)題
            添加LuaClass模塊用以導(dǎo)出類(lèi)到Lua腳本中
            粒子系統(tǒng)添加ggeParProcessHandler,可操作單個(gè)粒子運(yùn)動(dòng)

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

             
            2.0
            交換鏈模塊添加SetValidRect函數(shù)以便更好的與MFC結(jié)合使用
            游戲程序框架增加FSM類(lèi)

             

            1.22
            添加一個(gè)游戲程序框架,簡(jiǎn)化游戲開(kāi)發(fā)過(guò)程
            修改音效模塊播放代碼,提高多播性能
            音效模塊添加Sound_PauseAll()/Sound_ResumeAll()/Lock()/UnLock()函數(shù)

             

            1.21

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

            修改字體類(lèi)緩存管理算法,提高渲染效率
            ggeVector類(lèi)添加Clamp函數(shù)
            精靈類(lèi)SetFlip函數(shù)添加hotSpot參數(shù),指示是否翻轉(zhuǎn)參考點(diǎn)

            1.20
            添加GGE_TEXTURESIZE用以在系統(tǒng)啟動(dòng)時(shí)檢測(cè)最小紋理尺寸是否滿足要求
            字體類(lèi)添加SaveState和ReloadState函數(shù)用以保存/重載字體狀態(tài)
            GUI模塊添加ggeGUIWindow和ggeGUIImage控件
            添加GUI布局器,以便于GUI控件布局

             

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


            1.18
            修正載入多個(gè)不同音樂(lè)文件時(shí)非法操作問(wèn)題
            修正檢測(cè)音樂(lè)文件是否播放失敗問(wèn)題
            取消消息監(jiān)聽(tīng)器,用消息處理函數(shù)取代
            重寫(xiě)粒子編輯器
            添加
            Input_IsMouseOver()函數(shù),檢測(cè)鼠標(biāo)是否在窗體上
            添加Input_GetChar()函數(shù),返回當(dāng)前輸入的字符或字符串,支持中文輸入法
            添加ggeGUIInputBox控件,支持中/英文輸入,支持全屏/窗口模式
            添加ggeResManager類(lèi)對(duì)資源進(jìn)行管理

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

            1.16
            字體類(lèi)添加GetCharNum函數(shù)
            ggeGUIManager添加無(wú)鼠標(biāo)導(dǎo)航模式(GGEGUI_NONAVMOUSE)
            紋理類(lèi)支持dds壓縮紋理格式

            1.15
            修正ggeGUIButton控件紋理坐標(biāo)設(shè)置錯(cuò)誤
            修改了GUI和動(dòng)畫(huà)類(lèi)中的中的Update函數(shù)
            修改了ggeGUIButton對(duì)消息的響應(yīng)方式,只有在控件范圍內(nèi)釋放鼠標(biāo)左鍵才認(rèn)為在該區(qū)域按下鼠標(biāo)

            1.14
            從Font類(lèi)移除SetBufferSize,F(xiàn)ont類(lèi)內(nèi)部自動(dòng)調(diào)整緩沖區(qū)
            添加Image類(lèi),支持任意尺寸圖像

            1.13
            修改了一些Input函數(shù)的函數(shù)名
            添加GUI控件,增加ggeGUIListBox類(lèi)

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

            1.11
            修正有時(shí)設(shè)置窗口標(biāo)題失敗問(wèn)題
            修正兩次執(zhí)行Graph_BeginScene()函數(shù)時(shí),畫(huà)圖失敗問(wèn)題

            1.10
            重新設(shè)計(jì)引擎架構(gòu)
            重寫(xiě)音頻播放模塊
            采用動(dòng)態(tài)補(bǔ)償技術(shù)重寫(xiě)幀率控制模塊
            修正粒子系統(tǒng)的一些小Bug
            修正渲染交換鏈渲染圖形失敗問(wèn)題

            1.03
            Font類(lèi)添加ResetBufferSize函數(shù)
            添加Input_GetKey函數(shù)
            添加Input_IsMouseUp函數(shù)
            添加Input_IsKeyUp函數(shù)

            1.02
            修改渲染模塊,提高了渲染效率
            Font類(lèi)添加SetCharNum函數(shù)

            1.01
            修正字體間距Bug
            修正粒子移動(dòng)Bug
            修正設(shè)置渲染目標(biāo)后畫(huà)面閃耀問(wèn)題

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

            僅列出標(biāo)題
            共8頁(yè): 1 2 3 4 5 6 7 8 
            久久中文字幕精品| 久久久亚洲裙底偷窥综合| 少妇久久久久久久久久| 狠狠88综合久久久久综合网| 性高湖久久久久久久久| 青青青国产精品国产精品久久久久 | yy6080久久| 久久av无码专区亚洲av桃花岛| 久久精品一本到99热免费| 国产福利电影一区二区三区久久久久成人精品综合 | 狠狠久久综合| 久久这里只有精品首页| 亚洲精品高清国产一久久| 久久久综合香蕉尹人综合网| 伊人久久综合精品无码AV专区| 久久婷婷国产麻豆91天堂| 无码精品久久久久久人妻中字| 一本久道久久综合狠狠躁AV| 国产成人精品久久二区二区| 婷婷久久香蕉五月综合加勒比| 久久天天日天天操综合伊人av| 94久久国产乱子伦精品免费| 久久成人国产精品| 久久香蕉国产线看观看乱码| 久久久国产精品亚洲一区| 亚洲AV无码1区2区久久| 亚洲国产精品无码成人片久久| 久久久久久久久久久精品尤物 | 超级碰碰碰碰97久久久久| 国内精品久久久久久久亚洲| 久久毛片免费看一区二区三区| 久久精品一区二区三区中文字幕| 久久久WWW成人免费毛片| 综合久久给合久久狠狠狠97色 | 国产精品久久久久aaaa| 色综合久久久久无码专区| 久久综合亚洲色一区二区三区| 热久久最新网站获取| 久久丫精品国产亚洲av不卡| 国产一区二区精品久久岳| 无码人妻久久一区二区三区免费 |