在XNA中绘制边界框
本文关键字:边界 绘制 XNA | 更新日期: 2023-09-27 18:21:20
标题几乎概括了我的问题。我在2D碰撞方面遇到了困难,所以我认为实际看到我使用的边界框会更容易。这样,我可以看到它是否与我的另一个边界框相交。我正在检查一个玩家精灵和一组尖刺精灵。我想看看边界框。有没有相对简单的方法可以做到这一点(强调简单,因为我对XNA还很陌生)?感谢您的帮助!
以下是我的碰撞方法的一些示例代码。。。
protected bool Collide()
{
if (!isRolling)
{
playerRect = new Rectangle((int)pos.X, (int)pos.Y, size.X, size.Y);
spikesRect = new Rectangle((int)pos2.X, (int)pos2.Y, 65, 80);
return playerRect.Intersects(spikesRect);
}
else
{
playerRect = new Rectangle((int)pos.X, (int)pos.Y + offset, 5, 5);
spikesRect = new Rectangle((int)pos2.X, (int)pos2.Y, 65, 80);
return playerRect.Intersects(spikesRect);
}
}
所以我需要把playerRect和spikesRect画到屏幕上。
你可以看看这个例子(如果你只关心画线,请阅读这个),或者你可以尝试下面使用FillMode.WireFrame的代码
spriteBatch.Begin(SpriteSortMode.Immediate,BlendState.Opaque);
RasterizerState state = new RasterizerState();
state.FillMode = FillMode.WireFrame;
spriteBatch.GraphicsDevice.RasterizerState = state;
//loop this for all sprites!
spriteBatch.Draw(sprite, position, Color.White);
spriteBatch.End();
根据你现在发布的代码,你需要在你的抽奖代码中做的就是:
spriteBatch.Draw(playerTexture, playerRect, color);
//...
spriteBatch.Draw(spikesTexture, spikesRect, color);
只要确保抽签顺序足够高。
创建一个单色的1x1纹理,然后使用spriteBatch。绘制以拉伸它,使其填充您的边界矩形:
Texture2D pixel;
public override void LoadContent()
{
pixel = new Texture2D(this.GraphicsDevice,1,1);
Color[] colourData = new Color[1];
colourData[0] = Color.White; //The Colour of the rectangle
pixel.SetData<Color>(colourData);
}
public void DrawRectangle(SpriteBatch spriteBatch, Rectangle bounds)
{
spriteBatch.Draw(pixel,bounds,Color.White);
}
这是一些非常拼凑的代码,但基本上纹理必须创建一次,最好是在游戏的加载内容方法中。这4条线创建了一个1像素的纹理,并将该像素涂成白色"this"指的是游戏本身,因为游戏总是保存自己的GraphicsDevice的副本,变量被创建为游戏类中的字段,因此可以创建一次,然后随时使用。重要的是,纹理不是单个方法的局部,每次调用时都会创建纹理,因为纹理不会被设计成那样丢弃。
第二个方法是一个公共方法,可以调用它来绘制屏幕上的矩形。您可以简单地用方法所包含的单行替换对该方法的调用(交换掉c的参数),但拥有公共方法意味着它可以在主游戏类之外调用(而不是受sprite批处理和纹理的私有范围限制)。