标签: collision-detection

如何检测 Godot 中的碰撞?

我正在戈多中制作游戏,但我不知道可以使用什么代码来创建死亡平面(一个实体经过并消失或死亡的区域)。

collision-detection godot

10
推荐指数
1
解决办法
4万
查看次数

连续二维空间中避障的基本寻路

我正在编写一个模拟,其中生物对象应该能够朝向环境中的其他任意对象移动,在障碍物周围滑动而不是进行任何智能寻路.我不是想让它计划一条路 - 只是向一个大方向移动,并在障碍物周围反弹.

它是一个2D环境(俯视图),每个对象都有一个用于碰撞检测的边界矩形.没有网格,我不是在寻找A*解决方案.

我无法找到关于这种"哑"基于碰撞的寻路的任何教程,所以我可能不会用最常用的术语来描述它.

有关如何实现这一点的任何建议(或指向教程的链接)?

xna 2d collision-detection path-finding

9
推荐指数
2
解决办法
1万
查看次数

Java HashMap检测冲突

有没有办法在Java哈希映射中检测冲突?任何人都可以指出可能发生大量碰撞的情况.当然,如果你覆盖一个对象的哈希码并简单地返回一个常量值,肯定会发生冲突.我不是在谈论那个.我想知道前面提到的其他所有情况都会发生大量的碰撞无需修改默认的哈希码实现.

java collections hash collision-detection

9
推荐指数
1
解决办法
4632
查看次数

计算2个移动球将碰撞的x/y点

我试图制作(基本上)一个简单的游泳池游戏,并希望能够预测一旦它击中另一个球后射击的位置.

我相信,第一部分是计算cueball是否会击中任何东西,如果是,它会碰撞到哪里.我可以计算出一条线和一个球的碰撞点,但不是2个球.

因此,考虑到2个球的x/y位置和速度,我如何计算它们碰撞的点?

(PS:我知道我可以通过计算沿途每一步的两个球之间的距离来做到这一点,但我希望有一些更优雅和最优的东西.)

设置示例:尝试计算红点

http://dl.dropbox.com/u/6202117/circle.PNG

language-agnostic math physics collision-detection

9
推荐指数
2
解决办法
1752
查看次数

游戏碰撞处理

The code given is for example purposes, not copypasta from my codebase

我正在使用Boost和SDL用C++编写一个原始的,跨平台的Snake游戏,我想知道实现冲突处理的最佳方法是什么(不是碰撞检测).到目前为止,我一直在使用单一调度的想法,带有难看的意大利面条代码,如下所示:

void Snake::CollisionHandler(const WorldObject& obj)
{
    // collided with self
    if(obj.GetObjectType() == snake)
        Die();
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

另外,我有一个"全局"碰撞处理程序,它处理碰撞中涉及的事情,它们独立于每个对象,例如:


void GameWorld::CollisionHandler(WorldObject& obj1, WorldObject& obj2)
{
    if(obj1.GetObjectType() == snake && obj2.GetObjectType() == snake)
        PlayDeathSound();
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

避免像碰撞一样播放两次的声音.

我也考虑过双重调度,如下:


void Snake::CollisionHandler(WorldObject& obj) const
{
    // invoke obj's collision handler with a const Snake& parameter
    obj.CollisionHandler(*this);
}
// collided with self
void Snake::CollisionHandler(const Snake& obj)
{
    Die();
}

这还包括类似于上面的全局冲突处理程序.

然后就是只有 …

c++ collision-detection

9
推荐指数
1
解决办法
3367
查看次数

如何随机放置几个非碰撞的rects?

我正在和Pygame一起做2D游戏.我需要在不相交的情况下随机放置几个物体.我尝试了一些明显的方法,但它们没有用.

明显的方法如下(伪):

create list of objects
for object in list:
    for other object in list:
        if object collides with other object:
            create new list of objects
Run Code Online (Sandbox Code Playgroud)

那种方法永远都是.

我试过的其他方法:

create list of objects
for object in list:
    for other object in list:
        if object collides with other object:
             remove object from list
Run Code Online (Sandbox Code Playgroud)

该方法在空列表附近返回.

我正在处理一个大小为2到20个对象的列表.有什么建议?

编辑:矩形都是随机不同的大小.

python pygame collision-detection rect

9
推荐指数
1
解决办法
5315
查看次数

三角形算法的三维交叉点 - 显示最顶层的平面

我试图计算任意数量的飞机的最顶部交叉点,没有快乐!我正在使用actionscript,但只需要找到一个我可以实现的算法.

问题:

  • 考虑3垂直轴.
  • 用户为每个三角形/平面输入3个点,使得三角形的点位于其中一个轴上.
  • 用户可以输入任意数量的三角形
  • 我需要找到这些三角形的最顶层,并在屏幕上显示它以及相互作用的坐标.

这是一张图片来澄清我对2个三角形的意思:

在此输入图像描述

但是,当我们允许超过2个三角形时,我会遇到尴尬的交叉线.

algorithm collision-detection actionscript-3 computational-geometry

9
推荐指数
1
解决办法
859
查看次数

libgdx中的Circle-Rectangle碰撞侧检测

我花了几个小时寻找解决方案:我正在用libgdx开发一个小型自上而下的游戏(也许这对我使用的引擎很重要).现在我必须在我的角色(圆圈)和墙壁(矩形)之间实现碰撞检测.如果可以滑动,我希望角色在碰撞时沿着墙壁滑动.让我解释:

  • 如果我向上移动45度,我可以与墙的左下角碰撞.
  • 如果我与左边碰撞,我想停止x移动并向上移动.如果我离开墙壁,那么我想继续前进.与下侧相同(停止y运动)
  • 如果我与角落碰撞,我想停止运动(滑动不可能).

我实际上在做的是检查矩形的左边是否与我的圆相交.然后我检查左边的墙和我的圆圈以及墙的底线和我的圆圈之间的交叉点.取决于哪个交点occuret我设置回我的圆的x/y的possition并设置X/Y速度为0的问题是,大多数倍不是碰撞 BT的重叠 occures.所以底部检查返回true,即使实际上圆圈只会与右边碰撞.在这种情况下,两个交叉点测试都将返回true,我将重置两个速度,就像在Corner碰撞中一样.我怎么解决这个问题?是否有更好的方法来检测碰撞和碰撞的侧面或角落?我不需要在矩形的一侧确切的碰撞点.

编辑: 我不得不说,rects不是平行于x轴旋转.

java intersection collision-detection libgdx

9
推荐指数
1
解决办法
8572
查看次数

矩形之间的碰撞检测(无重叠) - libgdx

我已经在这里工作了2-3个星期,我仍然无法进行适当的碰撞检测.我用矩形创建了一个迷宫.我希望我的对象(在矩形中)在我的对象与任何墙碰撞并且能够移动到任何地方(或向下滑动墙)时停止.我的墙(矩形)具有负坐标,如下所示:

shapeRenderer.rect(0.9f, 12, 1.15f, 0, Color.RED, Color.RED, Color.RED, Color.RED); //NORTH
shapeRenderer.rect(1, 12, 0, -1.05f, Color.RED, Color.RED, Color.RED, Color.RED); // WEST
shapeRenderer.rect(2, 12, 0, -1.05f, Color.RED, Color.RED, Color.RED, Color.RED); // EAST
shapeRenderer.rect(0.9f, 11, 1.15f, 0, Color.RED, Color.RED, Color.RED, Color.RED); // SOUTH
Run Code Online (Sandbox Code Playgroud)

我目前正在使用我在SO中找到的重叠方法.这是我的CollisionManager类中的方法:

private boolean overlaps (Rectangle collision, Rectangle wall) {
    return Math.min(collision.x, collision.x + collision.width) 
        < Math.max(wall.x, wall.x + wall.width) 
    && Math.max(collision.x, collision.x + collision.width) 
        > Math.min(wall.x, wall.x + wall.width) 
    && Math.min(collision.y, collision.y + collision.height) 
        < Math.max(wall.y, wall.y + wall.height) 
    && …
Run Code Online (Sandbox Code Playgroud)

java maze collision-detection collision libgdx

9
推荐指数
2
解决办法
3337
查看次数

Pixel Perfect在自定义视图和ImageView之间进行碰撞检测

我有一个CustomView和一个图像视图.CustomView是一个围绕屏幕移动并从墙壁反弹的球.图像是四分之一圆,您可以在触摸时以圆圈旋转.我正在尝试制作我的游戏,以便当来自CustomView的填充像素与ImageView中的填充像素交叉路径时,检测到碰撞.我遇到的问题是我不知道如何检索每个视图上填充像素的位置.

这是我的XML代码

<com.leytontaylor.bouncyballz.AnimatedView
    android:id="@+id/anim_view"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    />

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/quartCircle"
    android:layout_gravity="center_horizontal"
    android:src="@drawable/quartercircle"
    android:scaleType="matrix"/>
Run Code Online (Sandbox Code Playgroud)

我的主要活动

public class MainActivity extends AppCompatActivity {

private static Bitmap imageOriginal, imageScaled;
private static Matrix matrix;

private ImageView dialer;
private int dialerHeight, dialerWidth;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // load the image only once
    if (imageOriginal == null) {
        imageOriginal = BitmapFactory.decodeResource(getResources(), R.drawable.quartercircle);
    }

    // initialize the matrix only once
    if (matrix == null) {
        matrix = new Matrix();
    } else {
        // …
Run Code Online (Sandbox Code Playgroud)

java android collision-detection pixel-perfect

9
推荐指数
1
解决办法
470
查看次数