gpt4 book ai didi

collision-detection - 游戏循环中的碰撞检测?

转载 作者:行者123 更新时间:2023-12-02 05:52:34 25 4
gpt4 key购买 nike

我正在开发一个简单的 2D 游戏(鸟瞰图)。我有转换物,它们是圆形的。游戏关卡周围有障碍物,都是矩形(轴对齐)。我希望射弹在碰撞时能够从障碍物上弹开。我不确定如何在我的游戏循环中实现这一点。猜测它会是这样的:

void gameLoop() {

Projectile p = ..;

p.updateLocation(p.getVelocity(), p.getDirection());

Barrier intersected = p.intersects(barriers);
if (intersected != null) {
// We hit a barrier after moving on this time tick.
// Figure out where our reflected location off the
// barrier should be now.
Point ptNew = intersected.reflect(p.getLastPoint(), p.getVelocity(),
p.getDirection());

// Our new location after getting bounced off the barrier.
ptNew.setLocation(ptNew);
}
}

因此,在移动射弹后,我们可以检查是否与其中一个障碍物相交(或完全位于其中)。如果是这样,根据我们的起点和速度/方向进行计算,找出反射位置应该离开障碍物的位置。

谢谢

----------更新------------------------

更具体一点 - 鉴于埃里克的评论,我确实需要确保射弹正确弹跳,如果它们的速度恰好太快以至于在单个游戏循环中直接通过,我就无法让它们穿过障碍物迭代。

在这种情况下,我想我需要针对所有障碍(可能重复)测试起点、速度、方向,直到速度不再可能相交。像这样的东西:

void gameLoop() {
Projectile p = ...;

Barrier barrier = moveProjectile(p, barriers);
while (barrier != null && p.stillHasVelocityThisFrame()) {
barrier = moveProjectile(p, barriers);
}

// at this point, the projectile is done moving / bouncing around.
}

void moveProjectile(Projectile projectile,
List<Barrier> barriers)
{
for (Barrier barrier : barriers) {
// tbd
Barrier intersected = test2dVectorAgainstRectangle(
projectile.getPosition(),
projectile.get2dVector());
// the above would test the projectile's vector
// to see if it intersects any barrier, reflect
// off of it if necessary, modify the projectile's
// position, and reduce the available distance it
// can still travel for this frame.
if (intersected) {
return intersected;
}
}

// no intersections.
return null;
}

是的,这已经变得有点棘手了。

谢谢

最佳答案

您想要使用矢量数学进行反射和碰撞检查。检测您是否在 1 次抽动中位于一条线的一侧(世界矩形的边缘)以及接下来该线的另一侧是非常简单的。同样的检查还可以通过更多的数学运算来为您提供碰撞点。然后你有一个点可以进行反射,再次使用向量。绘制与其他对象的碰撞有点复杂,但仍然可以完成。列出循环内的所有碰撞,并尝试找到沿其移动路径发生的第一个碰撞 - 再次重复使用一些点积魔法。或者,如果您检测到多个碰撞,您始终可以将每个对象备份到之前的位置并从那里应用碰撞。

你永远不想做的一件事就是让一个对象停留在另一个对象内部。它可能会导致它们相互卡住并且行为非常不稳定 - 取决于您如何编写碰撞代码。

关于collision-detection - 游戏循环中的碰撞检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7288546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com