游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3780|回复: 7

请问高手们判断碰撞问题有哪几种常用方法?

[复制链接]

5

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2003-9-6 19:25:00 | 显示全部楼层 |阅读模式
[em7]

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2003-9-6 21:45:00 | 显示全部楼层

Re:请问高手们判断碰撞问题有哪几种常用方法?

2D or 3D?

2D 一般是根据 地图 的信息
3D ......

15

主题

129

帖子

129

积分

注册会员

Rank: 2

积分
129
发表于 2003-9-7 07:26:00 | 显示全部楼层

Re:请问高手们判断碰撞问题有哪几种常用方法?

根据tile的情况啊,判断人物移动的下一格是不是有碰撞,听说高手用的是Alpha值判断,不过,我没有源代码~

17

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
发表于 2003-9-7 09:38:00 | 显示全部楼层

Re:请问高手们判断碰撞问题有哪几种常用方法?

3D的呢?
偶最近在研究D3D的说……

101

主题

467

帖子

482

积分

中级会员

Rank: 3Rank: 3

积分
482
QQ
发表于 2003-9-7 09:50:00 | 显示全部楼层

Re:请问高手们判断碰撞问题有哪几种常用方法?

用Alpha很容易。
不过速度会慢下来。
看看两个图片又无覆盖区域就知道了。

5

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2003-9-7 23:45:00 | 显示全部楼层

Re:请问高手们判断碰撞问题有哪几种常用方法?

谢谢大哥们的指教,上面说的方法我都听说过,不过感觉有点麻烦而且速度不行特别是根据颜色检测,本希望有更好的方法,看来还是回去继续找人切磋

14

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
QQ
发表于 2003-9-8 15:22:00 | 显示全部楼层

Re:请问高手们判断碰撞问题有哪几种常用方法?

在3d中粗略的碰撞可用包围盒
精确的就复杂了

5

主题

26

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2003-9-9 10:07:00 | 显示全部楼层

Re:请问高手们判断碰撞问题有哪几种常用方法?

3D不懂,2D的碰撞我是这样做的:
/*===============================================================================
名称:        HitUnMovableTest
描述:        判断当前移动对象按当前方向移动nSpeed的距离后是否会与指定物体相碰
返回值:FALSE 不会碰到 TRUE 碰到某物体
===============================================================================*/
BOOL CStage::HitUnMovableTest(        INT x,                                //被测对象X坐标
                                                                INT y,                                //被测对象Y坐标
                                                                INT width,                        //被测对象宽度
                                                                INT height,                        //被测对象高度
                                                                INT nPassRate,                //被测对象通过率
                                                                CUnMovable *object        //障碍物对象指针
                                                                )
{
        INT nPassPixelWidth = width*nPassRate/100; //根据通过率计算相应的象素(宽度)
        INT nPassPixelHeight = height*nPassRate/100; //根据通过率计算相应的象素(高度)
       
        if( ( y + height - nPassPixelHeight > object->GetY())                                        //目标不在测试矩形的上方
                && ( y + nPassPixelHeight < object->GetY() + object->GetHeight() )        //目标不在测试矩形的下方
                && ( x + width - nPassPixelWidth > object->GetX() )                                        //目标不在测试矩形的左方
                && ( x + nPassPixelWidth < object->GetX() + object->GetWidth()) )        //目标不在测试矩形的右方
                return TRUE;       
        else
                return FALSE;
}

另外,我测试了以下,简单的函数调用需耗10个左右的CPU时间单位(不知道QueryPerformanceCounter取的值可不可以这样叫),而赋值语句大约耗1个CPU时间单位,所以在循环里尽量减少各种Get方法可以提高一些速度。(我的C++版小游戏比C版的慢一半以上,可能也是由于对象方法滥用所置,但我想不出什么好方法,郁闷啊 )

碰撞测试非常影响游戏速度,哪位朋友有好的算法还望赐教。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-21 18:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表