Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在乒乓球比赛中需要更好的角度调整方法吗_Java_Pong - Fatal编程技术网

Java 在乒乓球比赛中需要更好的角度调整方法吗

Java 在乒乓球比赛中需要更好的角度调整方法吗,java,pong,Java,Pong,我正在制作一个克隆的乒乓球来练习我的编码,我一直在努力使球在被球拍击中时能够改变角度 我当前的实现有一个球的deltaX和deltaY,它随着游戏循环移动球。我这样做的方式是,如果你在球拍移动的时候击球,三角洲会根据球拍的方向增加或减少,但这对比赛来说一点也不自然 有人知道更好的方法吗?我要做的第一件事是将deltaX和deltaY改为ballAngle和deltaSpeed。这样你就可以从直角坐标系移动到极坐标系。由于球的运动性质(直线运动,每次撞击时改变直线的角度),这将使你的工作更轻松。从

我正在制作一个克隆的乒乓球来练习我的编码,我一直在努力使球在被球拍击中时能够改变角度

我当前的实现有一个球的deltaX和deltaY,它随着游戏循环移动球。我这样做的方式是,如果你在球拍移动的时候击球,三角洲会根据球拍的方向增加或减少,但这对比赛来说一点也不自然


有人知道更好的方法吗?

我要做的第一件事是将deltaX和deltaY改为ballAngle和deltaSpeed。这样你就可以从直角坐标系移动到极坐标系。由于球的运动性质(直线运动,每次撞击时改变直线的角度),这将使你的工作更轻松。从现在起,你只需要改变巴兰格来更新球的方向

但是,您必须更新绘制球的函数,使其从极坐标移回直角坐标,以便在屏幕上显示。一点高中三角法可以让您根据角度和速度计算屏幕位置增量:

newPosition = oldPosition + movementVector
与:

当然,这些方程可能需要根据测量球的角度进行一些修改

现在,要在每次与挡板碰撞时修改球的角度,您只需根据球接触挡板的哪个部分来增加或减少球的角度,绘图函数中的数学应该考虑实际更新x和y位置


我希望这能有所帮助。

请提供SSCCE(简短、完整、正确的示例)并在纸上画出来:如果球以90度撞击,会发生什么?45岁时怎么办?30点怎么办?然后写一个函数来转换这个角度。你是如何定义这个角度的?从划桨还是从法线到划桨?正如我所说,球有一个delta X和delta Y,所以如果deltaX是3,deltaY是1,它在X上移动3个像素,在Y上移动1个像素。我不是真的在计算角度本身,因为我希望它是动态的,而且很多角度不只是30/60或45度。我的问题是如何正确地改变三角洲,让它感觉自然,而不是像现在这样糟糕。这听起来是个好主意。非常感谢。您可以计算碰撞后的新角度,只需将360度减去实际角度(假设0º为正确方向)。此外,如果您的桨正在移动,您可以修改此选项。也就是说,如果在碰撞的瞬间,球拍向右移动,球会在某种程度上向左移动。减去360会使球向另一个方向移动,但非常不现实。最理想的情况是,你要计算出球击中球拍的角度,并根据球拍的法线镜像它。有点像反射,相对于法线镜像。现在他想做的是根据球拍的击球位置来调整角度,这在一般的撞砖或乒乓球游戏中是很标准的。今天,我本来打算根据球拍是否移动来改变角度,但是我喜欢你的想法,根据球在桨上的位置改变角度。这就是标准乒乓球的工作原理吗?如果有人想看到比赛的结果,
movementVector.x = deltaSpeed*cos(ballAngle)
movementVector.y = deltaSpeed*sin(ballAngle)