设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

小游戏模板·碰撞检测范例

查看数: 5389 | 评论数: 8 | 收藏 8
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-3-26 19:11

正文摘要:

本帖最后由 Sion 于 2013-9-15 14:11 编辑     本来是帮朋友写一个算法的,但是后来心血来潮,就写了这个小游戏。     使用这个需要一些脚本基础,可以做一些弹幕游戏~     不过 ...

回复

1073401157 发表于 2013-8-22 11:58:14
谢谢鸟!
Sion 发表于 2013-4-21 11:42:55
本帖最后由 Sion 于 2013-4-21 13:00 编辑
沉滞的剑 发表于 2013-4-21 09:35
仔细拜读了一遍,说一下自己的理解,还不是很充分请指正
首先是创建物体类,它们由中心定位。
然后创建四叉 ...


0、拜读不敢当,这些东西基本都是百度就能找到的...

1、如果不是最小子区域,区域的 @objects 就代表处于分割该区域十字上的物体。
因为物体是有体积的,位于区域十字上的物体被认为是有可能与该区域内的任何物体发生碰撞。

2、cache?是那个bitmap的缓存吗?就是默认系统提供的那个- -b

3、最好根据需要来建立模型,我现在做ARPG,人物模型都是全部用圆形,好处理,效果也不差。横版的话,我觉得用椭圆或者矩形比较好。计算两个不规则模型的碰撞太复杂,如果非要用复杂的模型,与它相碰撞的模型最好用简单的。两个椭圆的碰撞处理就已经非常复杂了。说实话这个玩意比较适合的是弹幕游戏,基本上只用计算点跟面的碰撞。如果进行面与面之间的碰撞检测,要消耗很多资源,随着物体数量的增加呈平方增长。一堆物体挤在一块的话,再优化也要卡- -b。当然,只是处理很少几个物体的话,模型复杂一点也不会卡的。

这个范例里因为是弹幕游戏,所以我偷懒了,每次判断都直接重置区域管理器,再把物体放进去。
后来做别的测试,因为物体碰撞以后又进行位置移动处理,然后再进行碰撞计算。像这样处理的话不但不精确,还变得很卡。
所以还是建议不要重置区域管理器,逐个对需要移动的物体进行 remove — 处理移动 — insert 这样的处理。
6rp 发表于 2013-4-21 11:17:17
简单学习了一下四叉树的原理。 分割在很小的区块内,检测内部是否碰撞这点很好说,但是问题是,如果跨界的碰撞怎么办? 两个区块物理位置是相邻的,可是逻辑位置可能要在父辈、祖父辈等等才能联系起来,这个细节怎么处理的?

点评

补充一下,是指位于物体所在区域所有上级区域的区域十字上的物体  发表于 2013-4-21 12:31
区域十字(边界)上的物体全部视为可能发生碰撞的物体  发表于 2013-4-21 11:45
沉滞的剑 发表于 2013-4-21 09:35:59
仔细拜读了一遍,说一下自己的理解,还不是很充分请指正
首先是创建物体类,它们由中心定位。
然后创建四叉树,首先是整张地图,然后把每个区域按象限分成四个subtree,然后再继续分subtree直到深度达到预设为止。
然后遍历物体中心坐标,先判断他在supertree的象限,如果有subtree的话就就分给相对的subtree然后一直分到不可再分为止
找物体删除也是同样的方法
但是有几个地方还是不太清楚,
  1. def collide_targets_of(obj)
  2.     if @objects.include?(obj)
  3.       all_inside_objects - [obj]
  4.     else # 如果物体不属于该区域,则在其子区域中寻找碰撞目标
  5.       @objects + @sub_areas[in_which_area(obj)].collide_targets_of(obj)
  6.     end
  7.   end
复制代码
判断依据没有搞清楚,能解释下cache的用法么?

还有就是每新建1个碰撞对象类,就要写和其他所有类型匹配的函数对么?
那有没有可能有检测不规则像素块?比如说几个正方形对象的集合?会不会影响效率,怎么判断中心点?
hanzixiang 发表于 2013-4-21 06:33:25
有些看懂了 有些没看懂  本人 还处于 小白阶段 希望 楼主 可以讲解下 还有就是 可以吧脚本注释写详细些么

点评

应该写得够详细了吧- -b  发表于 2013-4-21 11:49
feizhaodan 发表于 2013-3-27 18:54:48
正好在做像素移动和碰撞的东西。学习了。
但是为什么每次出现让我很想研究的东西的时候都是有那么多作业的时候。。。

点评

大哥你是我的启蒙恩师呀~  发表于 2013-3-27 19:09
九夜神尊 发表于 2013-3-26 23:59:02
这东西是带体积的对象管理器,用于管理平面内的对象。
适合做射击游戏,ARPG等等,比我写那个四叉树管理器强大多了。

此外,游戏蛮好玩。
姬文翔 发表于 2013-3-26 22:54:59
好像很底层的样子。我试试去
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-23 20:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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