我正在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();
答案 0 :(得分:1)
你必须在这里使用三角学,以便为球提供任何角度。
此外,所有变量都应成为double
s。速度和位置变量都是!
您将使用
之类的内容进行初始化double speedX = Math.Cos(angle);
double speedY = Mach.Sin(angle);
我不会告诉你这里的角度是弧度,而不是度数。哎呀,我刚刚做了:)
答案 1 :(得分:0)
您需要使intLeftSpeed和intTopSpeed成为所需的角度(或至少接近它)。它们目前总是相等的,因此它们总是产生45度角。