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

Project1

 找回密码
 注册会员
搜索
查看: 5363|回复: 8
打印 上一主题 下一主题

[RMVA发布] 小游戏模板·碰撞检测范例

[复制链接]

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

跳转到指定楼层
1
发表于 2013-3-26 19:11:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 Sion 于 2013-9-15 14:11 编辑

    本来是帮朋友写一个算法的,但是后来心血来潮,就写了这个小游戏。

    使用这个需要一些脚本基础,可以做一些弹幕游戏~
    不过里面有福利啦,进去玩就行啦。

下面是自己做的3个小游戏,没有什么创意内容,纯模仿罢了- -b

这个模仿了魔兽世界,法师职业的几个技能(已经好几年没玩了,不过有点怀念..):


另外两个嘛就是“是男人就撑30秒系列...”
射击(这个要撑30秒有点蛋疼了):

躲避(玩这个最好用鼠标,哈哈):



这个界面是用来测试代码效率的,运行时每一帧计算每一个物体是否与其他物体发生碰撞,碰撞的物体显示为红色。

有兴趣的朋友可以百度一下:四叉树 网格
如果你想用这个脚本,不懂的地方可以直接问我 :)

Scripts.rar (33.63 KB, 下载次数: 355)
新建工程,把这个解压到Data文件夹替换掉,之后运行工程就行了。

点评

你都没告诉别人进游戏按esc进入游戏  发表于 2013-3-26 23:59

评分

参与人数 4星屑 +500 +1 收起 理由
Vortur + 1 跪读...正是想要的东西❤
Mic_洛洛 + 60 超棒,必须塞个糖!
凌童鞋 + 140 好赞的~
feizhaodan + 300 学习了。

查看全部评分

Lv2.观梦者

梦石
0
星屑
301
在线时间
573 小时
注册时间
2005-10-27
帖子
1164
2
发表于 2013-3-26 22:54:59 | 只看该作者
好像很底层的样子。我试试去
认真地猥琐,猥琐地认真
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1323
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
3
发表于 2013-3-26 23:59:02 | 只看该作者
这东西是带体积的对象管理器,用于管理平面内的对象。
适合做射击游戏,ARPG等等,比我写那个四叉树管理器强大多了。

此外,游戏蛮好玩。
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
帖子
3039

贵宾

4
发表于 2013-3-27 18:54:48 | 只看该作者
正好在做像素移动和碰撞的东西。学习了。
但是为什么每次出现让我很想研究的东西的时候都是有那么多作业的时候。。。

点评

大哥你是我的启蒙恩师呀~  发表于 2013-3-27 19:09
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
27 小时
注册时间
2012-12-2
帖子
6
5
发表于 2013-4-21 06:33:25 | 只看该作者
有些看懂了 有些没看懂  本人 还处于 小白阶段 希望 楼主 可以讲解下 还有就是 可以吧脚本注释写详细些么

点评

应该写得够详细了吧- -b  发表于 2013-4-21 11:49
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1912
在线时间
1554 小时
注册时间
2013-4-13
帖子
917
6
发表于 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个碰撞对象类,就要写和其他所有类型匹配的函数对么?
那有没有可能有检测不规则像素块?比如说几个正方形对象的集合?会不会影响效率,怎么判断中心点?
夏普的道具店

塞露提亚-道具屋的经营妙方同人作品
发布帖:点击这里
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
1119 小时
注册时间
2012-7-24
帖子
600
7
发表于 2013-4-21 11:17:17 | 只看该作者
简单学习了一下四叉树的原理。 分割在很小的区块内,检测内部是否碰撞这点很好说,但是问题是,如果跨界的碰撞怎么办? 两个区块物理位置是相邻的,可是逻辑位置可能要在父辈、祖父辈等等才能联系起来,这个细节怎么处理的?

点评

补充一下,是指位于物体所在区域所有上级区域的区域十字上的物体  发表于 2013-4-21 12:31
区域十字(边界)上的物体全部视为可能发生碰撞的物体  发表于 2013-4-21 11:45
怕鼠的猫
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

8
 楼主| 发表于 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 这样的处理。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
44 小时
注册时间
2013-2-7
帖子
12
9
发表于 2013-8-22 11:58:14 | 只看该作者
谢谢鸟!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-17 10:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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