C#弹跳球角度变化

时间:2011-12-12 01:23:25

标签: c# winforms drawing

我正在C#中制作Windows窗体程序,其中图像以45度角在窗口中反弹。我需要帮助的部分是我必须制作程序,然后用户可以调整图像反弹的角度,介于0到90度之间。我想不出一个简单的方法,我真的需要帮助。

这是我到目前为止的定时器代码。 intSideposition是图片的左侧值。 intTopPosition是图片的最高价值。 intLeftSpeed是图像的水平速度。 intTopSpeed是图像的垂直速度。 817和380是图像将从其反弹的窗口的边界。目前,图像将以45度角反弹。

//Moves the label by a factor of whatever intLeftSpeed is
intSidePosition = intSidePosition + intLeftSpeed;
intTopPosition = intTopPosition + intTopSpeed;
this.lblSprite.Left = intSidePosition;
this.lblSprite.Top = intTopPosition;

//Checks if the sprite has hit the boundaries of the window, causing it to bounce
if (this.lblSprite.Left <= 0)
{
    intLeftSpeed = intLeftSpeed * -1;
}
else if (this.lblSprite.Left >= 817)
{
    intLeftSpeed = intLeftSpeed * -1;
}
else if (this.lblSprite.Top >= 380)
{
    intTopSpeed = intTopSpeed * -1;
}
else if (this.lblSprite.Top <= 0)
{
    intTopSpeed = intTopSpeed * -1;
}
lblAngle.Text = intAngle.ToString();

2 个答案:

答案 0 :(得分:1)

你必须在这里使用三角学,以便为球提供任何角度。

此外,所有变量都应成为double s。速度和位置变量都是!

您将使用

之类的内容进行初始化
double speedX = Math.Cos(angle);
double speedY = Mach.Sin(angle);

我不会告诉你这里的角度是弧度,而不是度数。哎呀,我刚刚做了:)

答案 1 :(得分:0)

您需要使intLeftSpeed和intTopSpeed成为所需的角度(或至少接近它)。它们目前总是相等的,因此它们总是产生45度角。