剑孤寒的小站

人生的价值不是用时间,而是用深度去衡量的!
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 剑孤寒 阅读(15462) | 评论 (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 剑孤寒 阅读(6735) | 评论 (0)编辑 收藏

前几天在做游戏时碰到要做一个以渐变方式切换场景的特效,记得以前在RMXP中要看到过类似的特效,于是赶快把它翻出来看了看,发现效果还不错。

    它的场景特效切换方法是:首先需要一个遮罩图,这个图的作用是根据时间和这个图上灰度的值来设置切换图的alpha值,具体的做法可以下载我写的演示程序和源代码,里面分别有最原始的操作像素实现这个特效的方法和使用shader来做这个特效的方法,这两种方法的速度差别还是很大的,我更倾向于使用shader来做,另外,虽然这个演示程序是2D的,但是方法也可以原封不动的搬到3D中去^_^     下载

   

最后放上截图一张^_^

 

 

 

 

 

 

 

 

 

 

posted @ 2008-10-26 11:03 剑孤寒 阅读(655) | 评论 (1)编辑 收藏

RPG游戏开发日志    下载Demo
 
2008年6月28日

    最近工作仍然很忙,所以游戏制作进度还是很慢,现在已完成了系统菜单,战斗系统也完成了一半了,等忙过这段时间,把战斗系统写完应该就可以更新一下Demo了。
系统菜单:



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

战斗系统:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2008年3月15日

    由于工作比较忙,从开始制作这个游戏到现在差不多半年了才完成游戏的一些基本系统,做这个游戏占了我大部分业余时间,虽然很累,但是跟做游戏的乐趣相比也算不了什么了。

    这个游戏决定采用《天之痕》的素材来做,一来是因为它的素材即使在今天看来仍可算得上精美,另外一个原因是当年玩这个游戏时被深深的感动了一把,所以对这个游戏留下了深刻的印象。

    好了,闲话不多说,先上一张图吧。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    《云城之梦》的地图仍然使用格子来判断行走和触发剧情,脚本方面使用了现在在游戏制作行业开始流行的Lua语言,上图中的对话系统就是用Lua写的。下面为地图编辑器:

 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    由于这个游戏使用的是我自己写的Galaxy2D游戏引擎,而这个引擎又是基于D3D的,在比如显示游戏大地图的时候可能会因为纹理过大而显卡不支持出现问题,为了解决这个问题,我专门针对大尺寸纹理写了一个ggeImage类,在内部把大纹理拆成一些小纹理,并实现自动管理和拼接,这样多大的地图也不怕了。

    接下来看看明暗效果和粒子效果吧,在《天之痕》里走到阴影下人物会变暗,走到窗户旁会被照亮,这个在当时的游戏中是很少见的,加了明暗效果以后,人物跟场景结合在一起的感觉就更明显了,而粒子特效可以试场景显得更加真是生动。

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    然后是游戏中的关键字显示,这个作为给玩家的提示还是很必要的,由于这个功能比较有用,所以我把这个功能做到了Galaxy2D引擎里,这样在显示关键字的时候直接在关键字前面加上一个标记就好了。

 

  

    最后是对话系统,算是RPG游戏中相对来说比较重要的系统了吧。

 

 

posted @ 2008-10-25 22:17 剑孤寒 阅读(407) | 评论 (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 剑孤寒 阅读(576) | 评论 (0)编辑 收藏

仅列出标题
共8页: 1 2 3 4 5 6 7 8