2006_06_23游戏开发日志

本文详细介绍了游戏开发中碰撞检测的基本原理与实现方法,包括游戏对象管理、地图数据读取及不同类型的碰撞物处理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接下来完成的目标:玩家能在地图上行走,并且有碰撞检测。
目标队列:
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加入特殊碰撞队列中,在特殊碰撞队列中的碰间检测就是
精确的检测了。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值