0

我正在尝试使用 Window.ClientBounds.Width 来检查精灵是否在窗口边框内。我想在 Game1.cs 之外的另一个类中使用它。假设我有一个 Car.cs 类,并且在该类中我想有一个自己的 Update 方法来检查它是否在窗口的边界内,但是我不能使用 Window.ClientBounds.Width 这个!?我还测试了创建一个静态 int gameBorder = Window.ClientBounds.Width; 在 Game1.cs 中并以这种方式达到值,但这也不起作用?!帮助是preciated!谢谢!

对于免费的 XNA 问题,有没有比 stackowerflow 更好的方法?

4

2 回答 2

0

在构建 Car 类时,我将传递对应该作为汽车一部分的 Game 或应该在其上显示的 GraphicsDevice 的引用。

class Car
{
   // Keep a reference to the game inside the car class.
   Game game;

   public Car (Game game)
   { 
      this.game = game;
   }

   public void Update(.....
   { 
       // You can access the client bounds here.
       // the best thing about this method is that
       // if the bounds ever changes, you don't have
       // to notify the car, it always has the correct
       // values.
   }
}
于 2012-06-10T19:02:25.397 回答
0

没有必要去做所有的工作,浪费所有的记忆。

XNA 有一个非常精确和特定的测试对象位置的方法。

您可以简单地传入 GraphicsDeviceManager graphics.PreferredBackBufferWidth 和 Height 方法来获取窗口的宽度和高度。

从那里,您可以根据对象是否在这些位置的矩形内来了解对象是否在游戏窗口中可见。

因此,假设您将后台缓冲区的宽度和高度设置为 640x480。

然后您只需检查纹理的边界是否在该矩形内。

所以,这是你的功能:

public void CheckIfWithinWindow(int width, int height)
{
    Rectangle wndRect = new Rectangle(0, 0, width, height);
    Rectangle carRect = new Rectangle(carPos.X, carPos.Y, carTexture.Width, carTexture.Height);

    if (wndRect.Intersects(carRect))
    {
         //carTexture is within currently visible window bounds!
    }
    else
    {
         //carTexture is NOT within currently visible window bounds!
    }
}

然后你可以像这样在你的起始 XNA 类中从你的更新方法调用这个函数。

public void Update(GameTime gameTime)
{
     myCar.CheckIfWithinWindow(graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);
}

希望有帮助。玩得开心。

于 2012-06-11T15:29:55.857 回答