Pong – 根据击球点的位置更改球的Y位置

我在Pong做了我的第一场比赛,我试图让球的Y增加或减less,这取决于它对桨的影响。 执行下面的代码后,球只能下降,但不能上升。 问题是什么?

if(paddle.detectCollison(ball)){ //30px on either side of the actual center of the paddle is considered the center if((ball.getY() > ((paddle.getH() / 2) + 30))) ball.setY(ball.getY() + 10); else if ((ball.getY() < ((paddle.getH() /2) - 30))) ball.setY(ball.getY() - 10); ball.setDX(-(ball.getDX())); } 

我认为中心的计算是没有考虑桨的位置。

不应该像(posY +(高度/ 2)+/- fudgeFactor)之类的东西?

根据0轴在y轴上的位置,这可能会导致其中一个if总是返回true,因为它与基于桨的位置总是在0 y位置进行比较。

你的球应该有方向vector(i,j)。 你的垫可以有vector场。 假设你的垫是垂直的(因为你没有提到他们是垂直或水平)。

一个垫的vector场应该是这样的:
对于上角:(0,1)1是向上的
对于垫的中间:(1,0)
下角:(0,-1)

它们之间的所有内容都是内插值。 (当需要使用/高度等时,可以很容易地计算这些值)。

接下来你要做的是增加vector场和球方向场的vector(但是你需要* 1 的dirvector值,因为球会改变X方向)。

因此,如果input(球方向)vector是(225)的(-1,-1),并且球从vector场到左边垫vector的底角几乎是(0.1,-0.9)。 反转球dir vect 值,并执行添加; 即(1,-1)+(0.1,-0.9),结果vector为(1.1,-1.9),您可以将其转换为角度并从那里开始工作。 还有一件好事就是在将这个向量给予球之前将其归一化。