碰撞检测 游戏

碰撞检测 游戏

游戏开发过程中用到的“碰撞检测技术”有哪些

可以用矩形,或者圆形作判断。

不过游戏里的碰撞检测可以不用自己实现,调用物理引擎就可以了,比如Box2D,愤怒的小鸟就用这个。

一、游戏开发制作的概念 游戏开发是一个过程,为了激发玩家玩游戏热情,通过遵循设计制作规则,来设计人物、场景等游戏要素。

主要流程包括原画创作、建模、材质、灯光及渲染、骨骼设定、动画、特效等部分。

3D游戏是怎么检测碰撞的?

首先假设你对与碰撞检测相关的几何和数学知识已经有了基本的了解。

在文章的最后,我将提供一些这方面的参考资料,以免你对它们感觉有点生疏。

另外我还假设你已经读过 Jeff Lander 的图形专栏里关于碰撞检测文章(“Crashing into the New Year,” ; “When Two Hearts Collide,”;和 “Collision Response: Bouncy, Trouncy, Fun,”)。

我将首先进行一个大概的描述,然后快速地切入到核心内容里,通过这两步从上至下地深入到碰撞检测中。

我将讨论两种类型的图形引擎中的碰撞检测:基于 portal 的和基于 BSP 的。

每种引擎中多边形的组织各不相同,因此在 world-object 型的碰撞检测上存在很大的差别。

而object-object 型的碰撞检测绝大多数地方在上述两种引擎里的是一样的,主要看你是如何实现的了。

当我们接触到多边形的碰撞检测时,我们还会实验如何将其扩展到我们学过的凸型物体上。

为了创建一个理想的碰撞检测程序,我们不得不在开发一个游戏的的图形管道的同时就开始计划并创建它的框架。

在项目的最后加入碰撞检测是相当困难的。

想在开发周期的末尾创建快速的碰撞检测将很有可能会使整个游戏被毁掉,因为我们不可能使它能高效地运行。

在好的游戏引擎中,碰撞检测应该是精确、有效并且十分快速的。

这些要求意味着碰撞检测将要与场景的多边形管理管道紧紧地联系起来。

这也意味着穷举法将无法工作??今天的3D游戏中每帧处理的数据量很可能导致打格,当你还在检测一个物体的各多边形是否与场景中的其它多边形碰撞时,时间已经过去了。

让我们从基本的游戏引擎循环开始吧(列表1)。

快速浏览这些代码来得到碰撞检测的相关策略。

我们先假设碰撞没有发生,然后更新物体的位置,如果发现发生了碰撞,我们将把物体移回原来的位置不允许它穿越边界(或将物体销毁或执行一些预防措施)。

然而,这个假设太过简单因为我们无法得知物体原来的位置是否仍然有效。

你必须为这种情况设计一个方案(否则你可能会体验到坠机或被子弹击中的感觉??就是前面举的例子)。

如果你是一个热心的玩家,你可能已经注意到了在一些游戏当中,当你挨着墙壁并试图穿过去的时候,摄像机就开始震动。

你正经历的就是将主角移回原位的情况。

震动是因为取了较大的时间片引起的。

Listing 1. Extremely Simplified Game Loop while(1){ process_input(); update_objects(); render_world(); } update_objects(){ for (each_object) save_old_position(); calc new_object_position {based on velocity accel. etc.} if (collide_with_other_objects()) new_object_position = old_position(); {or if destroyed object remove it etc.} Figure 1. Time gradient and collision tests. 但是我们的方法有缺陷,我们忘了在等式中加入时间。

图1告诉我们时间太重要了不能忘了它。

即便物体在 t1 或 t2 时刻没有发生碰撞,它仍有可能在 t 时刻穿过边界(t1 我们可以把时间看成是第四维并将所有运算在4维空间中进行。

然而这可能会让运算变得十分复杂,所以我们会避开这些。

我们还可以创建一个以 t1、t2时刻的物体为起始点的实心体,然后用它来与墙进行测试(见图2)Figure 2. Solid created from the space that an object spans over a given time frame. 一个简单的方法就是创建一个凸壳来罩住两个不同时刻的物体。

这种方法效率低下可能会明显地降低你的游戏速度。

以其创建一个凸壳,还不如创建一个围绕实心体的包围盒。

我们学习其它的技术后再回来讨论这个问题。

有另一种比较容易执行但精度较低的方法,就是把给定的时间段分为两分,然后测试时间中点的相交关系。

我们还可以递归地依次测定各段的时间中点。

这个方法比先前的方法要快得多,但不能保证能捕捉到所有的碰撞情况。

另一个暗藏着的问题是collide_with_other_objects()方法的实现??即判断一个物体是否与场景中的其它物体相交。

如果场景中有很多的物体,这个方法可能消耗很大。

如果要判断各物体与场景中其它物体是否相交,我们将不得不进行大概N选2次比较。

因此比较次数会是N的平方次?(或表示成O(N2))。

但我们可以用几种方法来避免进行O(N2)对的比较。

举个例子,我们可以把场景中的物体分成静态的(被撞物)和动态的(碰撞物??即使它的速度为0也行)。

就好象房间中的墙壁是被撞物,而一个扔向墙壁的小球是碰撞物。

我们可以创建两棵独立的树(每一棵对应一类物体),然后测试那些物体可能会碰撞的树。

我们甚至可以对环境进行约定让一些碰撞物之间不发生碰撞??比如我们不需要在两颗子弹之间进行判断。

现在在继续之前,(经过改进之后)我们可以说处理过程变得更加清晰了。

(另一个减少场景中成对的比较的方法就是建立八叉树。

这已经超出了这篇文章的范围,你可以在Spatial Data Structures: Quadtree, Octrees and Other Hierarchical Methods文章中的For Further Info一节里读到更多关于八叉的信息)。

现在让我们来看一下基于 Portal 引擎,了解为什么在这类引擎中一提到碰撞检测就会那么痛苦。

Portal引擎和Object-Object型碰撞 基于 Portal 的引擎把场景或世界分割成较小的凸…

射击游戏中的碰撞检测,怎么判定的是打到的头部还是身体?

你说的是汽车粉碎者这个游戏吧,在应用宝上面就可以下载的是经过安全认证了的,你可以下载一个玩玩看啊游戏等都是正版经过安全认证了的,是可以放心去使用的使用这个是可以备份数据到云端的,就不怕数据丢失了还可以闪电互传手机资源的,是不用花费流量的希望可以帮到你哦

vb 碰撞检测

if (image2.left <= image1.left + image1.width) and (image2.left>=image1.left-image2.width) and (image2.top<= image1.top+ image1.height) and (image2.top>=image1.top-image2.height) then image2.visible = falseimage1.visible = falseend if大概就是检测两个图片框的位置,如果符合条件就消失。

这段代码可以放在Timer里或者在每一次图片框移动的过程就触发一次。

怎么实现2D游戏的碰撞判定

可以用矩形,或者圆形作判断。

不过游戏里的碰撞检测可以不用自己实现,调用物理引擎就可以了,比如Box2D,愤怒的小鸟就用这个。

一、游戏开发制作的概念 游戏开发是一个过程,为了激发玩家玩游戏热情,通过遵循设计制作规则,来设计人物、场景等游戏要素。

主要流程包括原画创作、建模、材质、灯光及渲染、骨骼设定、动画、特效等部分。

游戏穿模什么意思

1、穿模是离散碰撞无法知晓这个物体在两帧之内是否穿过了不该穿过的物体,尤其是两帧里(由于高速)物体都没和任何障碍物的碰撞体有重叠。

射线法能避免高速下的穿模问题。

但性能开销更大。

2、还有一种穿模是人物模型与动作导致的穿模,比如衣服之间的穿透,尤其见于可换皮肤组件的游戏中。

这个情况下与其让物理去花性能去判断,不如让美术规定好模型部件的动作范围,从制作模型时就避免这一问题。

物理上避免穿模的办法: 1、离散碰撞检测:每帧判断每个碰撞体的每个面是否与其他碰撞体任何面有碰撞。

2、连续碰撞检测:在上述基础上,如果碰撞体在运动,还会做射线碰撞检测预测这一帧内碰撞体将要进行的运动是否有碰撞。

程序图形碰撞检测思路

像素级别的碰撞检测 像素级别的碰撞检测算得上是最精确的碰撞检测方法了,这类规则图形。

它的碰撞检测可以通过java API中的 Rectangle类来实现碰撞的检测。

2、复杂点的: 物体形状一般可以设定为矩形区域这属于碰撞检测问题。

1、简单的2D的物体,然后与另外一张位图上的所有点坐标进行对比, 一旦有一个像素点的坐标相同。

首先遍历算出一张位图所有的像素点坐标…

游戏穿模是什么?

1、穿模是离散碰撞无法知晓这个物体在两帧之内是否穿过了不该穿过的物体,尤其是两帧里(由于高速)物体都没和任何障碍物的碰撞体有重叠。

射线法能避免高速下的穿模问题。

但性能开销更大。

2、还有一种穿模是人物模型与动作导致的穿模,比如衣服之间的穿透,尤其见于可换皮肤组件的游戏中。

这个情况下与其让物理去花性能去判断,不如让美术规定好模型部件的动作范围,从制作模型时就避免这一问题。

物理上避免穿模的办法:1、离散碰撞检测:每帧判断每个碰撞体的每个面是否与其他碰撞体任何面有碰撞。

2、连续碰撞检测:在上述基础上,如果碰撞体在运动,还会做射线碰撞检测预测这一帧内碰撞体将要进行的运动是否有碰撞。

flash AS2.0中多重碰撞检测问题的请教

首先,你给出的代码存在逻辑错误,复制出来的元件只会移动三下就会停止(不知是否是测试故意设定)碰撞是没有图层限制的,意思就是说,不管你的元件在哪个深度,如果hitTest,则必定会触发。

而你没有测试到碰撞,那就是说明元件并没有碰撞,不是代码运行问题就是元件不存在问题导致。

场景上面的可视图层,其深度值为-16384,通过trace(this.getDepth());获得的值(测试软件:CS6)而一般写duplicateMovieClip的深度参数都为正数,故复制出来的元件都在所有预先手动摆放的元件上面duplicateMovieClip的第三参数应该是Number值,而你写的是_root,则得到的值是NaN,此时flash会将其放到最低层,即-16384,在所有手动摆放在场景中的元件下面。

如果有背景什么的刚好挡住元件,则会看不到复制出来的元件,但元件还是复制出来了“注:_root那儿,我试过多种,0 1 -1 等都不行。

”,经直接复制粘贴的测试,是可以的。

故说明,你说的不行并不是这个引起的原因。

970797游戏攻略网 » 碰撞检测 游戏

赞 (0)