- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
好吧,我有一个 2D 盒子碰撞代码,它基本上循环遍历名为“ block ”的列表中的每个 block ,它会检查我是否靠近侧面等等。
除了 block 的底部,它工作得很好。当我跳向底部时,我希望我的播放器简单地“反弹”。它这样做,但它是非常有问题的。这很难解释,所以我希望你们能找出我的底部碰撞代码有什么问题。
全文如下:
for(unsigned int i = 0; i<blocks.size(); i++){
Block &b = blocks.at(i);
if(!b.passable==true){
//Check if we are on the sides
if(y + height + vspeed >= b.worldY+2 && y + vspeed <= b.worldY+b.height)
{
//Right side
if(x + hspeed <= b.worldX+b.width-1 && x + hspeed > b.worldX+b.width + hspeed-2)
{
x = b.worldX + b.width; hspeed = 0;
}
//Left side
if(x + width + hspeed >= b.worldX +1 && x + width + hspeed <= b.worldX + hspeed + 2)
{
x = b.worldX - width; hspeed = 0;
}
}
//Check if we are on the top or the bottom
if(x + width + hspeed >= b.worldX+2 && x + hspeed <= b.worldX+b.width-2)
{
if(y + height + vspeed >= b.worldY && y + height + vspeed <= b.worldY + vspeed + 1 && jumpstate=="falling")
{
y = b.worldY - height; jumpstate.assign("ground"); vspeed = 0;
}
if(y + vspeed <= b.worldY + b.height && y + vspeed >= b.worldY + b.height + vspeed - 1 && jumpstate=="jumping")
{
y = b.worldY + b.height; jumpstate.assign("falling"); vspeed = 0;
}
}
}
}
最佳答案
我猜你应该设置 vspeed = -vspeed;
而不是 vspeed = 0
.完全弹性弹跳意味着速度在盒子的侧面得到镜像。
如果将其设置为零,则根据执行更新的顺序,您可能不会在一帧内移动。并且由于您使用 <=
和 >=
对于边界检查,您仍将在下一帧的框内,再次调用弹跳行为,并卡在您的头上粘在 block 上。
关于c++ - 2D Box Collision - 这是对的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6561341/
我用 Java 创建了一个简单的 2d 物理引擎,它使用圆形射弹和直墙。目前,每一帧,每个射弹的位置都会提前velocity * (1/fps) .速度随后更新,每帧一次。碰撞检测使用先前和当前位置以
我有一个 CollisionHandler 类,它有 OnCollisionEnter 方法。游戏中的每个 collideable 实体都有 CollisionHandler 作为组件。因此,当 2
我目前正在编写像 Breakout 这样的游戏,我想知道如何正确地将球从表面上弹开。 我采用了将速度旋转 90 度的幼稚方式,即: [vx, vy] -> [-vy, vx] 哪个(不出所料)效果不佳
这个问题一定存在于某个地方,但我不确定它会被称为什么。 在高度图之后,存在直角三角形地形。每个三角形的每个点都从高度图中获取其高度 (y)。 如果角色位于一组特定的坐标,您可以计算出他们在哪个三角形中
我正在做一个2D滚动大理石的项目。我可以检测出大理石何时撞到了盒子的角落,但是我无法弄清楚大理石在撞到角落时应该有什么行为。我需要弄清楚如何重新放置球,使其不与盒子重叠。通过框到框的碰撞,就像将框彼此
是否可以为实体定义更准确的自定义形状碰撞框而不是矩形?请让我知道是否可行以及如何实现? 最佳答案 当然可以,并且有多种可能的解决方案: Box2D: 是一个很棒的物理引擎,可作为 ImpactJS 的
我正在开发一款 2D 游戏,其中包含高速射弹,这些射弹会撞击高速(并且可能旋转得非常快)的多边形目标对象。我一直在试验和寻找适合我的强大碰撞检测算法。 如果快速旋转不是一个因素(即 0 或慢速旋转),
我正在制作一款平台游戏,其中有玩家和一些 Prop 。为了检查碰撞,我使用了 matterjs collisionactive 函数: this.matter.world.on("collisiona
我已经习惯于使用矩形进行碰撞检测,现在我有点难住了。我正在处理类似菱形的形状,在过去的几个小时里,我一直在试图找出如何检查碰撞。 我尝试检查第一个对象的四个点是否在第二个对象的点内,但这只是一个框(我
最初,两个半径为 R1 和 R2 的非接触球体处于静止状态。 然后在时间 = 0 时分别给它们两个加速度 a1 和 a2。查明他们是否会接触。它们的初始位置分别表示为 (x1,y1,z1) 和 (x2
我目前正在学习使用 LWJGL 和 OpenGL 的 ThinMatrix 3d 游戏开发教程。我正在尝试在我的游戏中实现碰撞检测。我已经准备好检测 AABB 与 AABB 碰撞的代码,但似乎无法弄清
如何在 3D 空间中有效地找到无限线和 AABB 之间的最近点? 我有一个简单的解决方案,它涉及找到距离 AABB 的所有 12 个边缘最近的点,并选择最接近的对,这很有效,但性能不是很好。我的用例需
凹面多边形之间有什么好的检测算法吗?我将不胜感激,到目前为止,我只找到了用于检测凸多边形之间的算法。 最佳答案 您可能会发现this论文很有趣。 关于collision-detection - 凹多边
我在哪里可以阅读更多关于游戏或具有交互性的应用程序的基本 2d 碰撞检测的信息? 编辑:Canvas 游戏的 javascript 怎么样? 最佳答案 要知道的最重要的定理是分离轴定理 (SAT)。基
我最近遇到了 this video并想实现类似的东西。基本方法很明确:我必须对图像进行阈值处理并检查虚拟对象是否与剩余前景发生碰撞。 我不想自己实现物理,而是想使用像 Box2D 这样的引擎。但是,如
我似乎无法让海龟在相互接触时死亡。只有当他们在同一个补丁上时,我才能杀死他们。有这样的功能吗? to killturtles if contact? [die] end 最佳答案 没有,但假设你的乌龟
OBB具有位置(x,y),速度(x,y)和方向(Matrix)。给定定期更新,OBB必须彼此冲突,返回被认为成功的举动的一部分。 我已经看过GPWiki上的Polygon测试-http://gpwik
你究竟是如何实现碰撞检测的?所涉及的费用是多少?不同的平台(c/c++、java、cocoa/iphone、flash、directX)对计算碰撞有不同的优化。最后,是否有库可以为我做这件事,或者我可
我正在尝试在我的物理引擎中赋予形状圆度/曲率。 我知道在数学上定义曲线的各种方法;例如贝塞尔曲线、椭圆等。但是我不确定哪种方法最适合在我的物理引擎中使用,因为必须考虑每种方法的速度、构造可行性和灵 a
我希望您对这个问题提出建议... 为简单起见,我将只考虑 x 轴。 对位置 10 的对象进行成像,其宽度也是 10 个单位,每秒向前移动 100 个单位,并且由于低帧,每次更新时它应该移动 80 个单
我是一名优秀的程序员,十分优秀!