嘿家伙我正在做一个划桨球/乒乓球比赛,我正在试图弄清楚如何让球像其他乒乓球比赛一样随机地从球拍中“弹跳”。
最简单的方法是什么?
目前我的碰撞代码只是让它向另一个方向反弹(向上)
public void checkCollision()
{
Rectangle paddlerect = new Rectangle((int)Paddle.pos.X, (int)Paddle.pos.Y, Paddle.paddle.Width, Paddle.paddle.Height);
Rectangle ballrect = new Rectangle((int)pos.X, (int)pos.Y, ball.Width, ball.Height);
if (ballrect.Intersects(paddlerect))
{
yspeed = 3;
}
}
你能告诉我如何让它随机弹跳到两侧吗?就像在diaganol上一样。
答案 0 :(得分:1)
我将假设球至少有4个变量:
角度+幅度形成Vector,我称之为v1。 为了使它在“随机”方向上反弹(实际上从不是随机的),你需要使用窦和余弦函数。我不会回去解释三角形中的东西如何工作,但你可以用它们来计算它的每个长度和角度。所以你有:
XSpeed = v1.Magnitude * cos(v1.Angle);
YSpeed = v1.Magnitude * sin(v1.Angle);
如果您需要了解更多信息,请转到Game Programming Wiki。说真的,这真的很棒。
答案 1 :(得分:0)
我假设你有一个名为xspeed
的变量,它控制球向左或向右移动的速度。
乒乓球比赛有两件主要的事情。
对于选项2你可以A)直接根据球击中的距离设置xspeed,或者B)你可以根据球的中间距离xspeed加/减。
var relativemidpoint = (ball.left + ball.width/2) -
(paddle.left + paddle.width/2);
// Option A
xspeed = relativemidpoint / 10; // or some other constant
// Option B
xspeed += relativemidpoint / 10; // or some other constant
您可能还希望将xspeed限制在一个范围内,这样它就不会太快地横向移动。
如果您希望整体速度保持不变,则必须根据yspeed
的值缩放xspeed
。