我写了一个突破式的游戏,除了球棒碰撞和反射之外,它都可以工作。如果球击中球棒时从左向右移动,那么它应该起作用:
如果它撞到左端,它会沿着原来的方向反弹。如果它撞到右端,它会沿着相同的方向反弹
对于从右向左的方向,反之亦然。以及:
如果它击中中间区域,它会以相同的角度反弹如果它击中中间的左/右区域,它会反弹回来,角度略有变化。
它有时也会穿过球棒,即使它在球棒上方,也应该反弹,这很令人困惑,但我认为可能是由于“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
你说得对,这是因为
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桌球小游戏的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。