C# XNA:如何让小行星从屏幕的所有侧面反弹
本文关键字:侧面 屏幕 XNA 小行星 | 更新日期: 2023-09-27 17:56:13
我正在尝试制作一个小行星游戏,并设法让小行星从一侧直线移动到屏幕到另一侧,但是,它以无限的直线运行,而不是像我想要的那样从屏幕的所有侧面反弹。
移动小行星的代码:
public void Update(GameTime gameTime)
{
position.X = position.X + speed;
position.Y = position.Y + speed;
if (position.X <= 0)
{
position.X = 0;
speed = random.Next(-3,3);
}
// Right Boundary
if (position.X >= 1280 - texture.Width)
{
position.X = 1280 - texture.Width;
speed = random.Next(-3,3);
}
// Top Boundary
if (position.Y <= 0)
{
position.Y = 0;
speed = random.Next(-3,3);
}
//Bottom Boundary
if (position.Y >= 1024 - texture.Height)
{
position.Y = 1024 - texture.Height;
speed = random.Next(-3,3);
}
}
我将如何修改此代码,使其停止直线移动并从屏幕的所有侧面反弹。(位置和速度在超类中声明,速度值在小行星类构造函数中声明)任何建议将不胜感激。干杯
由于我还不能发表评论,我将尽力理解您的问题。据我了解,发生在你身上的是天体直接上下移动,而不是在屏幕上
弹跳?我建议你使用矩阵,并创建一个这样的旋转。 你可以在这里阅读更多关于它的信息,把天体像火箭一样对待,并在你自己的代码中植入:
http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Angle_to_Direction.php
首先在随机位置创建小行星,并将它们添加为radnom velocity.vector2。 所以在你的更新函数上,你像这样更新:
position += velocity
然后使用此功能在反弹时反转速度。
private void CheckCollision()
{
if (position.X < 0){
position.X = 0;
velocity.X *= -1;
}
if (position.X + texture.Width > screenBounds.Width){
position.X = screenBounds.Width - texture.Width;
velocity.X *= -1;
}
if (position.Y < 0){
position.Y = 0;
velocity.Y *= -1;
}
}