作者:呼噜垃圾桶 | 来源:互联网 | 2022-10-12 09:19
我正在使用Javascript / HTML进行另一种壁球式(桨击式)游戏,但我遇到了在其他情况下似乎很常见的问题,但就我看来,我发现这种方法不好此实例的解决方案。基本上,我的游戏(不同于乒乓球)允许您向任意方向移动球拍。但是,如果桨向运动的球移动的速度过快,则球会通过它,而不是使其反弹。
我尝试使用球拍和球的速度来预测球的下一个位置,但看起来
我的策略归结为跟踪桨的速度并预测下一个桨的速度,然后将其用于我的交点,以避免在桨快速运动时丢失任何坐标间隙。
this.vx = this.x - this.lastX;
this.vy = this.y - this.lastY;
// predict next point
this.nextX = this.x + this.vx;
this.nextY = this.y + this.vy;
然后在我的游戏循环中,如果从点计算中检测到碰撞,我会反转速度
const { paddle, ball } = this;
const isBallGoingLeft = Math.sign(ball.vx) === -1;
const paddleX = isBallGoingLeft ? paddle.nextX + paddle.w : paddle.nextX;
const nextBallX = isBallGoingLeft ? ball.nextX : ball.nextX + ball.w;
// insersect function found here
// found here: http://paulbourke.net/geometry/pointlineplane/
if (
intersect(
ball.x,
ball.y,
nextBallX,
ball.nextY,
paddleX,
paddle.y,
paddleX,
paddle.y + paddle.h
)
) {
ball.x = isBallGoingLeft ? paddleX : paddle.x - ball.w;
ball.vx = -ball.vx;
}
您可以在此处看到完整的提琴:https : //jsfiddle.net/r8f0mxjn/4/
我想让球拍朝着球反弹,并从球拍的速度增加球的速度。