游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2645|回复: 4

关于偏移的问题(障碍物检测)

[复制链接]

5

主题

9

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2003-11-5 15:22:00 | 显示全部楼层 |阅读模式
我的代码很麻烦,后来看了圣一,看起来很简洁,但看不懂,代码如下
#define BLAK        0xa000                //地图中的障碍偏移值
//边界障碍物检测
int n0 = ((Hero.y-20-DY)/32 + SY) * Map[ Scene ].Width + ero.x+12-DX)/32 + SX);
int n1 = ((Hero.y-20-DY)/32 + SY) * Map[ Scene ].Width + ero.x+20-DX)/32 + SX);
int n2 = ((Hero.y-12-DY)/32 + SY) * Map[ Scene ].Width + ero.x+12-DX)/32 + SX);
int n3 = ((Hero.y-12-DY)/32 + SY) * Map[ Scene ].Width + ero.x+20-DX)/32 + SX);
if( Map[ Scene ].Data[n0] >= BLAK || Map[ Scene ].Data[n1] >= AK || Map[ Scene ].Data[n2] >= BLAK || Map[ Scene ].Data[n3] >= AK )
{
        Hero.x=Hero.old_x;
        Hero.y=Hero.old_y;
        SX = old_SX; SY = old_SY;
        DX = old_DX; DY = old_DY;
}哪位大哥大姐能说一下你们通常处理障碍的方法,小弟不胜感激

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2003-11-5 17:21:00 | 显示全部楼层

Re:关于偏移的问题(障碍物检测)

呵呵,通常的方法是用格子检测。
比如说你的地图有32*32个格子大,那么就是
unsigned int block[32];
如果要检查第10,10是否是障碍的话,就用:
x = 10; y = 10;
if(block[10] >> 10 & 0x1) 来检查。

也就是说,障碍实际上就是0或者1来储存,也就是说每个格子只占一位。

5

主题

9

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2003-11-6 18:12:00 | 显示全部楼层

Re:关于偏移的问题(障碍物检测)

想问一下0X1是什么?对BLOCK[10]右移,再进行位与运算的目的是什么?结果是什么?请您能说一下好吗?我很菜

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2003-11-7 09:21:00 | 显示全部楼层

Re:关于偏移的问题(障碍物检测)

。。。。比如说一个unsigned char a = 0;实际上就是:
00000000

这里有8位,就可以储存8个阻挡信息,1为阻挡,0为不阻挡。
如果该数是:

10101011
我想取其中的第5位是否是阻挡,就
a >> 5
这个时候就是
00000101|01011
然后这个时候取他的最低位,用& 0x1来取,0x1就是1,只不过习惯写成十六进制了。

5

主题

9

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2003-11-7 15:52:00 | 显示全部楼层

Re:关于偏移的问题(障碍物检测)

哦,远来如此,谢谢tarkey指教,小弟在此谢过
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-23 23:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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