Tag: 碰撞检测

箱子碰撞检测和弹跳

我正在制作乒乓球,并且我发现很难写出一种能够将球从四面墙上弹回的算法(我将在稍后处理得分,因为只有西部+东部的一部分将成为进球)。 所以此刻我希望球在盒子周围反弹。 检测球是否撞到墙壁很容易,但我在计算新角度时遇到了麻烦。 这是我到目前为止所提出的: if(dstY == 0) { // North wall if(angle < 90) { newAngle = angle + 90; } else { newAngle = angle – 90; } } else if(dstX == maxWidth) { // East wall if(angle < 90) { newAngle = angle + 270; } else { newAngle = angle + 90; […]

Java 2D碰撞?

嘿家伙我正在制作一个2D java游戏,我正在试图弄清楚如何制作一个好的碰撞代码。 我目前正在使用以下代码: public void checkCollision() { Rectangle player_rectangle = new Rectangle(player.getX(),player.getY(),32,32); for(Wall wall : walls) { Rectangle wall_rectangle = new Rectangle(wall.getX(), wall.getY(), 32,32); if (player_rectangle.intersects(wall_rectangle)) { Rectangle intersection = (Rectangle) player_rectangle.createIntersection(wall_rectangle); if (player.xspeed > 0) { player.x -= intersection.getWidth(); } if (player.yspeed > 0) { player.y -= intersection.getHeight(); } if (player.xspeed < 0) { […]

椭圆碰撞检测无法正常工作

所以我正在尝试实现椭圆可以与圆形连接的测试,但它不起作用。 edist = (float) Math.sqrt( Math.pow((px + ((pwidth/2) )) – (bx + (bsize/2)), 2 ) + Math.pow(-((py + ((pwidth/2)) ) – (bx + (bsize/2))), 2 ) ); 这是完整的代码(需要Slick2D): import org.newdawn.slick.AppGameContainer; import org.newdawn.slick.BasicGame; import org.newdawn.slick.Color; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.Input; import org.newdawn.slick.SlickException; public class ColTest extends BasicGame{ float px = 50; float py = 50; […]

轴对齐边界框和三角形的分离轴测试产生不正确的结果(3D)

我正在对AABB交叉测试进行三角测量,我正在从Christer Ericson的实时碰撞检测中获取此示例代码。 在给出示例之前,作者在书中所说的与示例不同,所以我不确定如何测试剩余的轴.. a01-a22。 测试:由两个边缘组合的叉积给出的九个轴。 // Test axes a00..a22 ( category 3 ) // Test axis a00 originDistance0 = triangle.point0.z * triangle.point1.y – triangle.point0.y * triangle.point1.z; originDistance2 = triangle.point1.z *( triangle.point1.y – triangle.point0.y ) – triangle.point1.z * ( triangle.point1.z – triangle.point0.z ); projectionRadius = extent1 * Math.abs( edge0.z ) + extent2 * Math.abs( edge0.y ); […]

碰撞检测:圆形物体

我正在开发一个Java游戏(但开发语言并不重要),包括圆形物体,如球或冰球,现在正在进行碰撞。 我使用计时器,所以在每一帧我检查是否发生碰撞。 这是一个表示对象右上角的图形。 对象的中心由点[0,0]表示,其半径为10px,单位为像素。 现在,如果我的对象(例如, obj_1 )是方形/菱形(蓝线),要查找是否有另一个( obj_2 )碰撞它,我只需要获取它们的坐标并检查Math.abs(obj_1.x – obj_2.x) + Math.abs(obj_1.y – obj_2.y) <= radius我会知道是否有碰撞。 但问题是圆形(红线)更棘手,因为它需要更多的空间,这个占用的空间不受直线限制。 当然我必须舍入一些值(例如在上图中,如果我想在x = 2处检查碰撞,我将必须舍入y值,看起来像9.5到10)。 但我根本不知道如何获得这个公式。 任何帮助将非常感谢。

libgdx中的Circle-Rectangle碰撞侧检测

我花了几个小时寻找解决方案:我正在用libgdx开发一个小型自上而下的游戏(也许这对我使用的引擎很重要)。 现在我必须在我的角色(圆圈)和墙壁(矩形)之间实现碰撞检测。 如果可以滑动,我希望角色在碰撞时沿着墙壁滑动。 让我解释: 如果我向上移动45度,我可以与墙的左下角碰撞。 如果我与左侧发生碰撞,我想停止x移动并向上移动。 如果我离开墙壁,那么我想继续前进。 与下侧相同(停止y运动) 如果我与角落碰撞我想停止运动(滑动不可能)。 我实际上做的是检查矩形的左边是否与我的圆相交。 然后我检查左边的墙和我的圆圈以及墙的底线和我的圆圈之间的交叉点。 根据哪个交叉点出现,我设置了我的圆圈的x / y,并将x / y速度设置为0.问题是,大多数情况下不是碰撞而是发生 重叠 。 所以底部检查返回true,即使实际上圆圈只会与右边碰撞。 在这种情况下,两个交叉点测试都将返回true,我将重置两个速度,就像在Corner碰撞中一样。 我怎么解决这个问题? 是否有更好的方法来检测碰撞和碰撞的侧面或角落? 我不需要在矩形的一侧确切的碰撞点。 编辑:我不得不说,rects不是平行于x轴旋转。

在Libgdx 3d中的RayCasting

好吧所以我一直在尝试相当一段时间在libgdx中的Raycast基于我在寻找的3D碰撞检测..但我画了一个空白,似乎没有任何文档。 有人会善意地把我送到正确的方向吗?

与MANY对象的碰撞检测

我主要关注Graphics方面来创建一个2DGame。 我看过/看过几个教程,但没有一个是令人高兴的。 我已经有一个玩家(一个正方形)移动并与屏幕上的其他方块相撞。 重力等也完成了。 如果屏幕上只有那么多的物体(30 * 20),一切都很好。 但是如果我把它增加到300 * 300,程序开始运行得很慢,因为它必须检查这么多的对象。 我真的不明白像Minecraft这样的游戏可以和所有这些块一起使用,我的程序已经放弃了300 * 300块。 我已经尝试仅在对象可见时检查碰撞,但这导致程序检查每个对象的可见性,从而导致同样的问题。 我究竟做错了什么? 帮助赞赏。 我将发布一些关于如何处理冲突的代码。 player.collision(player, wall); public void collision(Tile object1, Tile[] object2){ collisionCheckUp(object1, object2); collisionCheckDown(object1, object2); collisionCheckLeft(object1, object2); collisionCheckRight(object1, object2); } public void collisionCheckDown(Tile object1, Tile[] object2){ for (int i = 0; i < Map.tileAmount; i++){ if(object2[i] != null && object2[i].visible) { […]

想要让一个物体在圆圈内反弹,最终使物体沿着圆圈移动

这是有问题的代码: public void calculate() { // Center of circle is at (250, 250). //THIS ALGORITHM IS NOW PROVEN TO BE WORSE THAN I FEARED… /* What it does: * Moves object around in a circle. * Does not move the object towards the center. * Object always stays on the rim of the circle. * […]

与Libgdx的圆和多边形碰撞

在Libgdx中有一种方法可以validation多边形和圆形之间的碰撞吗? 我看到了Intersector类,但只发现了Circle和Rectangle的碰撞测试。 那么其他任何多边形呢? 如果我需要手动完成,使用Libgdx最好的方法是什么?