当前位置:编程学习 > C#/ASP.NET >>

关于游戏碰撞的问题,我不知道怎么解决!!



如上图,我的人物(角色)跟树木,房子,箱子怎么判断是否相撞?
请有经验的人教教我,应该要怎么想?思路是怎么样的?

我是试过,比如if(人物.x<=list.障碍物.x&&人物.y<=list.障碍物.y)
我知道这样子是不行的,总之各位给点思路看看吧,我自己再想想。。。。 --------------------编程问答-------------------- 这个... 人 和 物  没有小到只是一个点吧= = --------------------编程问答-------------------- 要重新定义坐标和坐标转换的。
如果按照现在的做法至少人物的坐标和障碍的坐标应该要变成一个矩形。然后判断的时候要不大于或小于矩形要碰撞的那边的全部值。 --------------------编程问答-------------------- 我的想法呢是
 把人和物都看成是个四方块吧; 
这样就先弄俩个类 一个人类 和物类  
都有 x,y,width,height(x,y是中心点的位置,另俩个就是宽高了= =);

你只要判断 人和物的 x的差值(x1-x2) 是不是小于((width1-width2)/2)的值 或者是
 x的差值(y1-y2) 是不是小于((height1-height2)/2)的值

不就行了 --------------------编程问答-------------------- ((width1+width2)/2)
((height1+height2)/2)

弄错了= =  应该是行的 可能不是很准吧  最少人不是方的。。。。 --------------------编程问答-------------------- 还有一个方法,绘制一个碰撞层,所有碰撞物都染成一种颜色,可通过区域为一种颜色,每次走的时候在碰撞曾判断自己区域内颜色是否是碰撞物体颜色,是就扔回去,不是就通过。 --------------------编程问答-------------------- 前面的差值 得是绝对值= = --------------------编程问答-------------------- 这个好办,检测人物所在的矩形和物体所在的矩形就是了,微软貌似有个函数!!! --------------------编程问答-------------------- API函数:BOOL IntersectRect(LPRECT lprcDst,CONST RECT *lprcSrc1,CONST RECT *lprcSrc2)

形参lprcSrc1 与lprcSrc2为你要判断的两个矩形的RECT结构变量地址.
函数在形参lprcDst中返回两个矩形相交的区域(矩形)坐标.有了这个坐标,面积不愁.

如果两个矩形相交,函数返回非零值.否则返回0.
引用 7 楼  的回复:
这个好办,检测人物所在的矩形和物体所在的矩形就是了,微软貌似有个函数!!!
--------------------编程问答--------------------
引用 2 楼  的回复:
要重新定义坐标和坐标转换的。
如果按照现在的做法至少人物的坐标和障碍的坐标应该要变成一个矩形。然后判断的时候要不大于或小于矩形要碰撞的那边的全部值。

你这样子做是不行的,我不是说了吗? --------------------编程问答--------------------
引用 8 楼  的回复:
API函数:BOOL IntersectRect(LPRECT lprcDst,CONST RECT *lprcSrc1,CONST RECT *lprcSrc2)

形参lprcSrc1 与lprcSrc2为你要判断的两个矩形的RECT结构变量地址.
函数在形参lprcDst中返回两个矩形相交的区域(矩形)坐标.有了这个坐标,面积不愁.

如果两个矩形相交,函数返回非零值.否则返回0……

我的是画上去的,点不出这个函数!!如果是PictureBox对象的话就能点得出。。 --------------------编程问答-------------------- 一般游戏地图都对应有数据文件,地图中的不同的物件可以用不同的数字编码,比如20.5,30,1,前2个数字表示游戏中的坐标,非屏幕坐标,需要进行坐标转换。第3个表示箱子,这个数据文件用一个矩阵来表示,有了这个要检查碰撞就容易了。所以做游戏之前先做好地图编辑器吧。 --------------------编程问答-------------------- 楼主。。。。。。挽尊。。 --------------------编程问答--------------------
引用 3 楼  的回复:
我的想法呢是
 把人和物都看成是个四方块吧; 
这样就先弄俩个类 一个人类 和物类  
都有 x,y,width,height(x,y是中心点的位置,另俩个就是宽高了= =);

你只要判断 人和物的 x的差值(x1-x2) 是不是小于((width1-width2)/2)的值 或者是
 x的差值(y1-y2) 是不是小于((height1-height2)/2)的值

不就行了……

我都看不懂你在说什么? --------------------编程问答-------------------- 郁闷。。 --------------------编程问答-------------------- if(人物.x==list.障碍物.x &&人物.y==list.障碍物.y)
--------------------编程问答-------------------- 任何地图,都需要把地图坐标系跟像素x-y坐标系做转换的函数。你自己做一个,把像素x-y转换为14x10的x-y就行了。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,