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

蟒蛇-我的球/球棒碰撞和反射有什么问题?

席俊
2023-03-14

我写了一个突破式的游戏,除了球棒碰撞和反射之外,它都可以工作。如果球击中球棒时从左向右移动,那么它应该起作用:

如果它撞到左端,它会沿着原来的方向反弹。如果它撞到右端,它会沿着相同的方向反弹

对于从右向左的方向,反之亦然。以及:

如果它击中中间区域,它会以相同的角度反弹如果它击中中间的左/右区域,它会反弹回来,角度略有变化。

它有时也会穿过球棒,即使它在球棒上方,也应该反弹,这很令人困惑,但我认为可能是由于“BH==Bat. y线”,因为球以一个角度移动,所以可能会稍微越过并继续前进。

代码:(BAW/H=球拍宽度/高度,BW/H=球宽度/高度)

# check with bat

if theball.y+BH == thebat.y and (theball.x >= thebat.x-5 and theball.x <= thebat.x+BATW): 

# collision in centre - rebounds with angle reflection == angle incidence

    if theball.cx>= thebat.x+40 and theball.cx<=thebat.x+60:
        theball.dy = -theball.dy
        return

    # else find ball direction, do all areas for each direction

    if theball.oldx < theball.x: # ball moving left to right, find which area: ends, mid lef, mid right, centre

        # collision with left end

        if theball.cx<= thebat.x+10:

        # ball rebounds back in direction it came from

            theball.dx = - theball.dx
            theball.dy = - theball.dy
            return

        # collision with right end

        if theball.cx >= thebat.x+90:

            angle -= 10
            if angle < MIN_ANGLE:
                angle = MIN_ANGLE

            theball.dx, theball.dy = calc_dxdy(angle)
            return  

        # middle left and right 

        # mid left

        if (theball.cx > thebat.x+10 and theball.cx < thebat.x+40):

            angle -=5
            if angle <= MIN_ANGLE:
                angle = MIN_ANGLE
                theball.dx, theball.dy = calc_dxdy(angle)
                return

        # mid right

        if  (theball.cx > thebat.x+60 and theball.cx < thebat.x+90):

            angle +=5
            if angle >= MAX_ANGLE:
                angle = MAX_ANGLE
                theball.dx, theball.dy = calc_dxdy(angle)
                return  

    # ball moving right to left

    if theball.oldx > theball.x: # ball moving right to left, find which area: ends, mid lef, mid right, centre

        # collision with right end

        if theball.cx>= thebat.x+90: 

        # ball rebounds back in direction it came from

            theball.dx = - theball.dx
            theball.dy = - theball.dy
            return

        # collision with right end

        if theball.cx <= thebat.x+10:

            angle += 10
            if angle > MAX_ANGLE:
                angle = MAX_ANGLE

            theball.dx, theball.dy = calc_dxdy(angle)
            return  

        # middle left and right 

        # mid left

        if (theball.cx > thebat.x+10 and theball.cx < thebat.x+40):

            angle +=5
            if angle <= MAX_ANGLE:
                angle = MAX_ANGLE
                theball.dx, theball.dy = calc_dxdy(angle)
                return

        # mid right

        if  (theball.cx > thebat.x+60 and theball.cx < thebat.x+90):

            angle -=5
            if angle >= MIN_ANGLE:
                angle = MIN_ANGLE
                theball.dx, theball.dy = calc_dxdy(angle)
                return  

共有1个答案

商琛
2023-03-14

你说得对,这是因为

theball.y+BH == thebat.y 

从某种角度来看,球不太可能处于正确的高度。试着增加一些不确定性。例如:

UNCERTAINTY = 10
if theball.y+BH - UNCERTAINTY <= thebat.y <= theball.y+BH + UNCERTAINTY and ...
 类似资料:
  • 这两个球在画布上弹来弹去。 如果球碰撞了,帆布应该说游戏结束。 这是一个代码,我已经为碰撞到目前为止

  • The Sphere Collider is a basic sphere-shaped collision primitive. 球体碰撞器是一个基本的球体形状的原型碰撞器。 A pile of Sphere Colliders 一堆球体碰撞器 Properties 属性 Material 材质 Reference to the Physic Material that determines h

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

  • 我想写一个C++程序来计算球体和平面之间的碰撞。 规则是下落物体的角度等于反射角度。 我对Sphere有什么看法: 平面用平面方程系数来描述: 对于球面碰撞检测,我没有问题。但碰撞后如何求速度? 我发现了什么: 因此,最终我需要计算的更新值。

  • 我需要在我的中添加一个新的目录位置,但问题是我使用的是一个全新安装的系统(Linux),其中尚未定义任何。我读过并使用过,我认为我很了解它,但我不知道当没有存在时会发生什么。 我不能附加到不存在的东西上,但我希望当前发现的所有重要库都能正常工作,因此要小心,我在Python中使用了来获取所有标准值。然后我为定义了一个-变量,包括我刚刚找到的所有节点,以及我的新目录。但是哇,很多东西都停止工作了!P

  • 本文向大家介绍java桌球小游戏 小球任意角度碰撞,包括了java桌球小游戏 小球任意角度碰撞的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java桌球小游戏的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。