Rob*_*ard 2 c# 2d game-physics
我一直在使用C#中的一个简单程序,其中Ball [X,Y]坐标是周期性递增的.
我已经设法实现了碰撞检测方法,但我正在尝试确定如何以一个角度反射球,并选择沿着相同的线性路径反弹.
dx = -dx //This bounces the ball back along the same linear path
dy = -dy
Run Code Online (Sandbox Code Playgroud)
解决方案 三角函数
theta = range between 0<theta<=360 depending on where it bounced
x = cos(theta)*time
y= sin(theta)*time
Run Code Online (Sandbox Code Playgroud)
牛顿物理学的全部观点是它不是随机的,它是确定性的.如果你以同样的角度以同样的速度和相同的旋转将同一个球扔在同一个墙上,它每次都会到达同一个地方.
这种程序对于编程和物理来说都是一个非常好的学习机会.我鼓励你做的是先写一个模拟非常简单的弹跳的程序.如您所知,当一个物体直接向下移动并撞击水平表面时,您可以将反弹建模为简单地反转垂直速度分量.只是做对了; 没有引力,没有任何东西.这是一个很好的开始.
然后尝试以相同的方式添加水平墙的弹跳.
然后尝试添加从未与水平或垂直方向对齐的墙壁弹跳.这就是你必须要学习矢量和三角学如何工作的地方,因为你必须通过斜向撞击墙来计算出球的速度的哪个部分被改变.
然后加重力.然后从空气中添加摩擦力.然后添加球可以旋转的事实.增加弹性,使你可以模拟球的变形.
一旦你达到这一点,如果你想引入随机性,你将能够弄清楚如何做到这一点.例如,您可以通过说"好吧,当球撞到墙壁并变形时引入随机性,我将引入一个随机元素,将其变形改变0-10%".然后,这将改变模拟弹跳球的方式.您可以尝试不同类型的随机性:例如,添加随机气流.