c# XNA球拍球游戏
本文关键字:游戏 XNA | 更新日期: 2023-09-27 18:10:55
嘿,伙计们,我正在制作一个球拍球/乒乓球游戏,我想弄清楚如何使球"弹"离球拍随机像其他乒乓球游戏。
最简单的方法是什么?
目前我的碰撞代码只是让它在另一个方向反弹(向上)
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;
}
}
你能告诉我如何使它随机地向两边反弹吗?就像在对角线上。
我假设这个球至少有4个变量:
- XSpeed
- YSpeed
角度+大小形成一个向量,我称之为v1。为了使它在一个"随机"的方向上反弹(实际上,这从来都不是随机的),你需要使用鼻窦和鼻窦函数。我不打算回去解释三角形中的东西是如何工作的,但是你可以用它们来计算它的每一个长度和角度。所以你有:
XSpeed = v1.Magnitude * cos(v1.Angle);
YSpeed = v1.Magnitude * sin(v1.Angle);
如果你需要了解更多,请前往Game Programming Wiki。说真的,它真的很棒。
我假设你有一个名为xspeed
的变量,它控制球向左或向右移动的速度。
乒乓类游戏主要做两件事。
- 只要反转y速度,就像你正在做的那样。
- 反转y速度,但也改变x速度取决于球在"棒"上击中的位置。例如,在最右边击球会使球向右反弹。
对于选项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在一个范围内,这样它就不会变得太快。
如果你想让整体速度保持不变,那么你必须根据xspeed
的值来缩放yspeed
。