XNA C# HUD SpriteFont
本文关键字:SpriteFont HUD XNA | 更新日期: 2023-09-27 18:10:08
我在我的HUD中添加了一个SpriteFont,结果如下:
http://i557.photobucket.com/albums/ss13/kookehmonsters/dev/untitled - 1. - png
所有这些白点都来自我的相机平移和文字。这是怎么呢
Label displayName = new Label();
displayName.Text = "DisplayName";
displayName.Size = displayName.SpriteFont.MeasureString(displayName.Text);
displayName.Position = new Vector2((int)player.Camera.Position.X, (int)player.Camera.Position.Y);
ControlManager.Add(displayName);
ControlManager.Draw(GameRef.SpriteBatch);
Label.cs
public class Label : Control
{
public Label()
{
tabStop = false;
}
public override void Update(GameTime gameTime)
{
}
public override void Draw(SpriteBatch spriteBatch)
{
spriteBatch.DrawString(SpriteFont, Text, Position, Color);
}
public override void HandleInput()
{
}
}
从GamePlayScreen.cs中更新方法
public override void Update(GameTime gameTime)
{
player.Update(gameTime);
sprite.Update(gameTime);
hud.Update(gameTime);
if (InputHandler.KeyReleased(Keys.Add))
{
player.Camera.ZoomIn();
if (player.Camera.CameraMode == CameraMode.Follow)
player.Camera.LockToSprite(sprite);
}
else if (InputHandler.KeyReleased(Keys.Subtract))
{
player.Camera.ZoomOut();
if (player.Camera.CameraMode == CameraMode.Follow)
player.Camera.LockToSprite(sprite);
}
Vector2 motion = new Vector2();
if (InputHandler.KeyDown(Keys.W))
{
sprite.CurrentAnimation = AnimationKey.Up;
motion.Y = -1;
}
else if (InputHandler.KeyDown(Keys.S))
{
sprite.CurrentAnimation = AnimationKey.Down;
motion.Y = 1;
}
if (InputHandler.KeyDown(Keys.A))
{
sprite.CurrentAnimation = AnimationKey.Up;
motion.X = -1;
}
else if (InputHandler.KeyDown(Keys.D))
{
sprite.CurrentAnimation = AnimationKey.Down;
motion.X = 1;
}
if (motion != Vector2.Zero)
{
sprite.IsAnimating = true;
motion.Normalize();
sprite.Position += motion * sprite.Speed;
sprite.LockToMap();
if (player.Camera.CameraMode == CameraMode.Follow)
player.Camera.LockToSprite(sprite);
}
else
{
sprite.IsAnimating = false;
}
if (InputHandler.KeyReleased(Keys.F))
{
player.Camera.ToggleCameraMode();
if (player.Camera.CameraMode == CameraMode.Follow)
player.Camera.LockToSprite(sprite);
}
if (player.Camera.CameraMode != CameraMode.Follow)
{
if (InputHandler.KeyReleased(Keys.C))
{
player.Camera.LockToSprite(sprite);
}
}
base.Update(gameTime);
}
GamePlayScreen.cs的绘制方法
public override void Draw(GameTime gameTime)
{
GameRef.SpriteBatch.Begin(
SpriteSortMode.Deferred,
BlendState.AlphaBlend,
SamplerState.PointClamp,
null,
null,
null,
player.Camera.Transformation);
map.Draw(GameRef.SpriteBatch, player.Camera);
sprite.Draw(gameTime, GameRef.SpriteBatch, player.Camera);
hud.Draw(gameTime);
base.Draw(gameTime);
GameRef.SpriteBatch.End();
}
不要用摄像机变换来绘制hud,当然也不要用摄像机来更新hud的位置,因为它们现在是固定的。
public override void Draw(GameTime gameTime)
{
GameRef.SpriteBatch.Begin(
SpriteSortMode.Deferred,
BlendState.AlphaBlend,
SamplerState.PointClamp,
null,
null,
null,
player.Camera.Transformation);
map.Draw(GameRef.SpriteBatch, player.Camera);
sprite.Draw(gameTime, GameRef.SpriteBatch, player.Camera);
base.Draw(gameTime);
GameRef.SpriteBatch.End();
GameRef.SpriteBatch.Begin();
hud.Draw(gameTime);
GameRef.SpriteBatch.End();
}