0

我正在制作一个 Pong 克隆,并以这种方式处理我的变量:

direction = a value from 0 to 2*pi 
distX = cos(direction)*speed of the ball
distY = sin(direction)*speed of the ball

on update:
ball's x position += distX
ball's y position += distY

当球撞到墙壁时(仅以 90 度反射),我已经可以正确处理方向的翻转,但是桨呢?我不知道如何最好地处理球连接后的角度和速度。

这取决于它在桨上的位置吗?桨是否移动有关系吗?ETC

我不知道在这里处理数学的合理方法。

4

2 回答 2

1

没有“正确”的方式来做到这一点。您是编写代码的人,除非您有一些严格的规范,否则您可以按照自己的喜好处理它。

基本上,您可以像处理球壁碰撞一样处理球桨碰撞,即通过简单地计算反射角并将其分配给direction

如果您想随着桨速成比例地增加反射角,您可以简单地对新的direction.

但这真的取决于你。

无论如何,例如,如果您提供处理桨速的代码,有人可以为您提供进一步的指示。

于 2012-01-24T16:19:16.997 回答
0

我想你的桨是矩形的吗?为简单起见,让我们假设球可能只撞击球拍的表面(即,不是角落或侧面)。

问:这取决于它在桨上的位置吗?答:如果桨是一个轴对齐的矩形,并且球只能撞击它的表面,那么不会。

问:桨是否移动有关系吗?答:这是你的选择。游戏物理不是真正的物理,所以你可以自由地做任何让游戏玩得最好的事情。

首先,将球的方向旋转 90 度并不能准确地将球从墙上偏转。考虑一下球完全撞墙的极端情况。如果我将球旋转 90 度,那么球将在墙壁旁边平行移动。

我相信你目前正在做的事情,只是有点混乱地说,如果球撞到垂直的墙上,你就会反转球的水平方向。当然,这并不等同于将球的方向旋转 90 度。

如果我想将速度从桨传给球,我会将球的运动视为向量,将桨的运动视为向量。然后我将这两个向量加在一起。k为了控制传递给球的速度,我会使用一个系数(我们称之为而不是 x,y 组件,这不是必需的)。

if (ball hits paddle):
  k = 0.5;
  // paddle only moves horizontally, which simplifies the math
  paddle_vx = paddle_speed * paddle_xdirection;
  ball_vx = cos(ball_direction) * speed + k*paddle_vx; 
  ball_vy = - sin(ball_direction) * speed // flips from the collision
  ball_direction = atan2(ball_vy, ball_vx);
  ball_speed = 100; // always constant
于 2012-01-24T17:10:09.540 回答