当前位置: 首页 > 知识库问答 >
问题:

(Java)在突破游戏中使用矢量碰撞

蔺昊穹
2023-03-14

所以我正在android studio中制作一款突破性游戏。

在做了一个游戏循环和与桨和桨的基本碰撞后,我注意到我的球在提高速度后开始穿过我的桨和桨。

问题在于它在一帧中碰撞了两次,所以我的基本碰撞还不够。

我读过关于使用向量数学求解的书。但这对我来说太过分了,我的头也被它缠住了。我指的是这个问题的答案:Refer Here

if (RectF.intersects(bricks[i].getRect(), ball.getRect())) {

Brick brick = bricks[i];

if(ball.getRect().centerX()>brick.minX() && ball.getRect().centerX() < brick.maxX()){

    ball.reverseYVelocity();

    if(ball.getRect().top > brick.getRect().centerY()){

        ball.clearObstacleY(brick.getRect().bottom - ball.getRect().height());

    } else {

        ball.clearObstacleY(brick.getRect().top + ball.getRect().height());

    }

} else {

ball.reverseXVelocity();

if(ball.getRect().left > brick.getRect().centerX()){

    ball.clearObstacleX(brick.getRect().right + ball.getRect().width());

} else {

ball.clearObstacleX(brick.getRect().left - ball.getRect().width());

}
}

我的球更新是:

public void update(long fps, float speed){
    rect.left    = rect.left   + (xVelocity*speed / fps);
    rect.top     = rect.top    + (yVelocity*speed / fps);
    rect.right   = rect.left   + ballWidth;
    rect.bottom  = rect.top    - ballHeight;
}

那么我如何将其转换为这样的内容:Demo

提前感谢!


共有1个答案

管景天
2023-03-14

在每个圈中,你都应该记录下球之前的位置。当检测到碰撞时,应立即将球移动到前一帧位置,然后处理反弹效果。它不应该记录两次碰撞,这意味着您没有正确处理碰撞。如果你说当你提高速度时,球似乎要穿过球拍,那么你要么看看你是如何计算速度的,要么提高帧速率。你的FPS设置在什么位置?

你也可以在这里和这里看到我的答案

 类似资料:
  • 当用户按下左右键时,我希望我的矩形停止。我研究了多个密钥处理,但无法找到任何东西。 谢谢你的帮助

  • 我目前正在尝试使用java和libgdx制作一个突破性的克隆。我现在很难让球以合适的角度从挡块上弹起。简而言之,我遇到的问题是,球每帧移动12个像素,并不总是与砖的边缘对齐。如果有人对更好的移动球的方法或其他检查碰撞的方法有任何建议,我们将不胜感激! 主要游戏类 Ball类 砖块代码以防万一

  • 我的java突破游戏有问题。一切都很好,除了我的球拍在右侧离开屏幕,我的球也会这样,但现在不用担心。 //防止挡板移出屏幕 Public void update(){x=xVelocity; //根据向左或向右按设定速度 按下Public void键(KeyEvent e) //释放关键帧后设置速度 如果(e.getKeyCode()==KeyEvent.VK_LEFT){

  • 我已经和LWJGL一起开发这个游戏几个星期了。自从我增加了跳跃的能力后,向上的碰撞给我带来了很多问题。 这个游戏是一个基于2D瓷砖的侧翻游戏。总的来说,除了玩家跳跃时,碰撞几乎是完美的。起初我想“哦,也许我只需要改变跳跃机制”,但后来我意识到只有当玩家通过某个x坐标时才会发生这种情况。 现在,对于实际问题本身:如果玩家在传递某个x坐标时跳转,他们将通过平铺,并测试顶部碰撞返回false。 这是整个

  • 我正在创建一个突破游戏来熟悉Java。目前我已经把一切都做好了,但我注意到球似乎是朝着同一个方向飞的。 我已经对它进行了编程,当球碰到球拍时,Y速度是相反的。这是可行的,但球似乎遵循相同的路线。。。 如何让碰撞看起来更真实? 当球击中桨的左侧时,我想将其重新定向到左侧,但我不确定在哪个角度反射它。有人能提供一个公式来帮助我计算出当球接触桨的左侧或右侧时需要引导的角度吗?

  • 问题内容: 我正在尝试制作一个Python游戏,其中红龟追逐蓝龟。当红色乌龟抓到蓝色乌龟时,我希望它在屏幕上说“碰撞”,但它不起作用。当它碰撞时,什么也没有发生,并且给我一个错误“ Turtle”对象不可调用”。 问题答案: 与实际编程相比,这段代码似乎更让人想不到: 乌龟没有方法。您不能使用此语句简单地将方法添加到现有类。没有和功能。每次运动后,如果需要,该碰撞测试将只执行一次。让我们尝试挽救我