关闭

2006_06_23游戏开发日志

972人阅读 评论(0) 收藏 举报

接下来完成的目标:玩家能在地图上行走,并且有碰撞检测。
目标队列:
1.玩能在地图上行走,并且有碰撞检测。
2.读文件地图数据
3.实现炸弹
4.实现奖品

 

?代表有部分近期完成
(*)代表近期完成
X代表近期不会制做

 

游戏系统:
程序管理器(*)
|
|--程序库初始化(*)
|
|--应用程序WINDOWS消息响应(*)
|
|--产生游戏世界(*)


游戏世界(CGameWorld)?
|
|---游戏对象ID管理器(*)
|
|----游戏地图(*)
|
|---特殊碰撞物辅助列表X
|
|----游戏主循环(*)

资源管理器  (?)
|
|---精灵资源管理(动画管理)(*)
|
|---图片管理 (X)
|
|---声音管理 (X)

输入设备管理(*)
|---输入设备接口(把所有输入信号转换为 ”上下左右AB“ 这类控制信息。(*)


相关支持系统
|
|--自定义RTTI(*)

 

 

主要游戏类关系图::
CGameObject (?)
|


|--CGameWorld (?)
|
|--CMover (?)
|        |
|        |--CBomb (X)
|        |
|        |--CPlayer (*)
|        |
|        |--CMounster (X)
|
|--CPrize (X)
|
|--CFire (X)
|
|--CCollision (*)
|        |
|        | --CBox (*)
|        |
|        | --CStone (*)
|
|--CDieMoive(*)


游戏类简单说明:
CGameObject:提供游戏对象基本接口,如对象激活、对象二进制化(序列化)、对象显视等
CGameWorld :产生游戏对象、拥有地图、可以遍历所有游戏对象
CBomb           :游戏中的炸弹,也具有障碍功能。
CPlayer          :游戏中的玩家
CMounster    :游戏中的怪物
CPrize           :游戏奖品
CBox、CStone:游戏中的碰撞物,分别是:Box能被炸坏并且可能会穿墙,CStone石头是怎样都不会变化的,但是一定是阻挡物。
CDieMoive      :死亡动画,其对象不会对任游戏对象产生作用,当人物或怪物死后就会产生。

游戏中的碰撞检测:
先说说更新后的一般碰撞规则:
1>所有碰撞物不能重叠
2>移动者在产生碰撞的的前一刻,立即停止运动。

再来看看最新的游戏地图中的格子:
struct ITEM
{
       struct
        {
           soft;   //有穿墙可以被穿透功能就可以穿透
           hard; //任何方式都不可以穿透
        }coll;

       bomb;  //炸弹ID
       fire   ;   //火焰ID
};
地图数据则类似这样  GameMap[colY][colX];
几种最当出现在事件都放在这些方格中了,当我想检测前面是否有碰撞,直接就可以地图中取出数据。这是最快的方式了。

关于炸弹的移动,箱子的移动功能的实现:
其实这些都不是目前的目标,不过还是给出相关实现的方法思路,
这两种物体其实是又能检测碰撞(移动物体)、本身自已又产生碰撞的。
对于这种物体在移动的时间,我们可以先把在地图中的相关数据抽除,并且把其自身的ID加入特殊碰撞队列中,在特殊碰撞队列中的碰间检测就是
精确的检测了。

其实现在就是两种碰撞检测方式都在同时使用,当使用数组的话就是最快的,当使用碰撞队列就是最精确的。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:117604次
    • 积分:2171
    • 等级:
    • 排名:第18116名
    • 原创:94篇
    • 转载:2篇
    • 译文:0篇
    • 评论:25条
    最新评论