ShinyNova
文章平均质量分 50
cmsmagic
同城游戏程序员,努力写出精品游戏。
隶属于ShinyNova项目组。
展开
-
第十章,ShinyNova中资源调用方式
游戏开发的程序员经常会为资源管理而犯愁,尤其是资源量较大时。什么是最理想的开发模式?我们把资源放到指定目录下,就可以直接按资源名使用,无须定义资源ID,也不用什么配置文件。考虑到内存空间占用,最好能按需要加载,而不是一股脑靠近内存中,甚至能够自动将长时间未使用的内存自动清理。(未完)原创 2010-06-25 17:33:00 · 172 阅读 · 0 评论 -
鼠标选取实体一二
<br />在xyBackPaint中,当移动鼠标时,内核从下到上分析所有视域内实体,选中最上层的实体。<br />简单明了,但未必实用。很简单的例子,就是一个控件,框体需要处理鼠标移动的消息,但之上的按钮未必需要反应。因为只选中最上层物体,所以当鼠标移动到控件子按钮上时,控件就收到了UNTOUCH消息,而异常中断了对鼠标移动的处理。<br /> <br />理想的方式是,首先检索所有的父实体。<br />命中父实体后,再在父实体内寻找子实体。<br />ShinyNova目前的处理方式是,检索所有具有OB原创 2010-11-04 11:32:00 · 228 阅读 · 0 评论 -
第九章,PPS图片格式与SNG_PIC结构
<br /> 对于2D游戏引擎来说,如何储存和使用图片是非常关键的问题。我们首先分析一下当前市面上通用图片格式的优缺点,主要考虑以下几点:是否支持透明,是否支持半透明,是否支持调色板,是否支持多帧格式,储存空间占用。<br /> <br /> bmp 支持调色板,储存空间大<br /> png 支持透明,支持半透明,储存空间小<br /> gif 支持透明,支持多帧,支持调色板,储存空间小<br /> <br /> 从游戏开发程序员的角原创 2010-06-25 17:27:00 · 388 阅读 · 0 评论 -
第七章,流程与动画
假设现在我们要在视域中播放一组gif动画,时长20秒播放3遍,应该怎么办?唔,毫无疑问,你应该有个定时器,固定时间间隔检测一下是否跳转到一下帧。好的,现在我们要播放一百组这样的gif动画,在屏幕的不同地方,他们的起始时间和播放次数都不尽相同,有些快有些慢。。。相信你一定囧到了。 另举一例,假设我们要使一个物体加速前进,初始速度v,加速度a,直到命中目比地(x,y)为止。这两个例子的共同点是:我们想要达到的效果是确定的,但却不能在当前时刻立即完成,需要有一个模块(函数)来定时更新状态。我们原创 2010-06-24 13:48:00 · 184 阅读 · 0 评论 -
第四章,如何获取并处理外设输入(INPUT)
游戏开发少不了处理鼠标键盘手柄等外设输入消息。比较传统的做法是,截取windows系统消息,如WM_MOUSEMOVE,WM_LBUTTONDOWN等,然后对游戏数据进行分析:当前坐标位于什么物体之上,应该做出何种反应。这是一件非常复杂而繁琐的事情,你必须首先搞清楚物体的相互遮掩关系,如果要透过图像中的透明区域点选到背景物体则更加令人头疼。 ShinyNova的基础思想是面向对象化,一切面向实体。为了达到快速,便利开发的目标,我们必须把: 点在哪里--->点到什么物体上--->该物原创 2010-06-21 11:32:00 · 321 阅读 · 0 评论 -
第五章,消息相关
<br /> 如同前文所说,在任何一个PObject的派生类中可以使用SendMsg和PostMsg向其他实体发送消息。关于消息号定义和处理,ShinyNova有一些相关规范。系统占用的消息号定义于ShinyNovaQuest.h中,用户自定义的消息号应该从 MSG_CUSTOMER_BEGIN = 80000000开始。<br /> 通过消息发送指针时,如果该指针需要在使用后清理,清理工作应由接受实体完成。但系统自动转发输入外设消息中附带在param2上的 MOUSEDATA指针原创 2010-06-22 09:41:00 · 187 阅读 · 0 评论 -
第三章,实体(PObject)
如前文所述,实体是构成游戏的基础,不仅仅是最基础的显示单元,也是最基础的逻辑单元。用一个装B的说法,实体的二向性。 ShinyNova内核中最重要的模块ObjectModule负责维护所有的实体。通常我们会在引擎外部创建一个实体并注册到内核作为游戏逻辑的母体,而之后的开发过程将全部封装在母体内部进行,例如: class CMyGame:public PObject { ... } m_core.RegistNewObject(n原创 2010-06-20 15:42:00 · 303 阅读 · 0 评论 -
第二章,ShinyNova如何描述世界?
我们试图用最简单的三个概念将这个精彩纷呈的世界描述清楚,并依照这三个基本概念来设计我们的游戏。 毫无疑问,实体是最基础的。你,我,阿猫阿狗都是实体,各种简单的实体复杂的组合在一起构成了我们眼中的画面。但我们的游戏不是油画,什么东西使我们的世界“动”了起来? 是什么驱使你拿起水杯?是什么驱使风拂动柳叶?是什么让你的脸红了起来...当面对着“她”。我们不妨把这种动力称为“刺激”,又或者更专业化的名词“消息”。当实体收到消息进而将反应以消息的形式扩散出去的时候,我们的世界荡漾了起来。 然而我们原创 2010-06-07 16:47:00 · 212 阅读 · 0 评论 -
ShinyNova中的焦点交互处理问题
<br />最近碰到一个难题,假设我们希望某个控件在失去焦点时隐藏,同时这个控件可以被某个按钮触发显示。<br />想起来很简单,处理下失去焦点的消息MSG_INPUT_LOST_FOCUS和在按钮触发时判断下控件的显示状态,并调整到相反状态就可以了。<br />但问题是,点击按钮本身会让控件失去焦点,于是控件状态已经切换了,在按钮处理消息时再反状态,于是负负得正。。。囧。<br /> <br />和其他同事讨论了下这个问题,有人提出可以用参数来同步。这个办法不是不可以,但是有很多弊端。例如,当手动隐藏这个原创 2010-08-02 11:30:00 · 242 阅读 · 1 评论 -
第一篇,ShinyNova为什么而生.
“好的,让我们开始做这个游戏吧!” “唔,它应该支持3-5万人同时在线!” “画面应该相当华丽,操作要绚,怪要傻!” “随机掉宝,锻造插孔,宠物系统,玩家可以结婚生子!” “。。。。。。” 也许我们花费了一整天美丽的时光来幻想这个游戏应该如何精彩如何吸引玩家,但当你终于决定动手去做的时候却发现,梦想与现实之间的鸿沟是如此之巨大。当你埋头编写几个像素贴图,在画面某个角落打上黄色字符串提示玩家输入帐号时,你会发现这与初衷已经全然不同。游戏是如此的精彩,而实现过程是如此之枯燥无趣,大量的原创 2010-06-03 13:50:00 · 298 阅读 · 0 评论 -
游戏结束的自我清理可能造成轻微的内存泄漏
最近8byte的内存泄漏查到崩溃,各种工具都尝试了,vld库,boundschecker,都无法检查出原因。最终发现是这样,在结束游戏的时候,聊天框控件在自我清理中发出了一个带8byte数据的申请(StopApply)。但在系统清理过程中,跳过了对这些申请的执行,所以造成内存泄漏。这种情况应该是无法避免的,也是允许的不用深究。原创 2010-04-30 10:38:00 · 175 阅读 · 0 评论 -
标准化实体
<br />随着gss项目的进行,发现实体之间混乱的关系使得维护和开发的难度越来越大。实体之间松散的联系虽然得到了开发的自由度,但代价同样巨大。往往为了一些简单的功能,不大不花费大量的精力协调实体之间的关系。为了解决这个问题,打算在原有的基础上,增加一种物体属性:<br />OBJECT_FLAGS_STANDARD //标准化<br /> <br />满足标准化的实体应该是满足下列条件的:<br />1.一个标准化实体的所有子代都是标准化的。<br />2.标准化实体的子代图层总是位于父体之上,同时关联原创 2010-11-04 14:08:00 · 178 阅读 · 0 评论