首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查不同速度的球与球拍之间的碰撞?

如何检查不同速度的球与球拍之间的碰撞?
EN

Stack Overflow用户
提问于 2017-01-07 02:17:25
回答 2查看 57关注 0票数 0

我目前正在为一项大学作业创建一个类似于乒乓球的游戏。为了让你对游戏的工作原理有一个大致的了解,在屏幕底部有一个水平移动的单一球拍。还有一个球将在屏幕上移动,玩家必须使用球拍阻止球离开屏幕底部。每次球打到屏幕的顶部,球员就得一分。

我已经设法让比赛的大部分时间正常工作,但我在球和球拍之间的碰撞上遇到了一些问题。目前,如果球以每帧1像素的速度移动,则碰撞可以正常工作。然而,对于规范,球的速度必须是可变的,因此球需要能够在所有速度下正确地与球拍碰撞。

我目前使用的碰撞代码如下:

代码语言:javascript
复制
if((ball.y+5) == (bat.y))
    {
        if(ball.x >= bat.x && ball.x <= (bat.x+40))
        {
            ball.dy = -ball.dy;
            game.goingUp = true;
        }
    }

本质上,这将测试球的坐标是否等于球拍的坐标,如果是这样,将改变球的方向。然而,由于这具有特定的坐标,球可能会以更高的速度完全通过球棒。

我想做的是让这个碰撞以每帧10像素的速度工作,但我真的不确定如何做到这一点,任何帮助都会非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2017-01-07 02:37:43

我相信解决这个问题的方法就是他们所说的“扫荡”。取最后一个位置和当前位置,创建一条直线(如果您正在处理更复杂的对象,则创建一个更大的矩形),然后用它进行碰撞检查。

应该注意的是,任何大于一个像素的东西都可以表示为边界框,它们是矩形或圆形,相对简单。

票数 1
EN

Stack Overflow用户

发布于 2017-01-07 06:16:37

这是我的第一个丑陋的解决方案(让我的创意源源不断)。不过,我还没有测试它,我怀疑它的准确性。

使用>=将告诉您是否会发生碰撞(假设您当时在x轴上):

代码语言:javascript
复制
if((ball.y+5) >= (bat.y)

然后只有一个问题,那就是如何处理碰撞发生时你会在多远的左边和右边。如果你跟踪你沿着x轴移动了多远,你可以尝试估计当(ball.y+5) == bat.y时你会在哪里。可能是这样的:

代码语言:javascript
复制
// Assuming this is how you keep track of your old position:
int x_difference = ball.x - ball.last_x;
int y_difference = ball.y - ball.last_y;

float percent = (bat.y - (ball.last_y+5)) / float(y_difference); // how far through your last move were you when you crossed the bat's y position
int x_at_collision = ball.x + (percent * x_difference);

现在您可以修改您的另一行:

代码语言:javascript
复制
if(x_at_collision >= bat.x && x_at_collision <= (bat.x+40))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41511840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档