自定义inputTextBox闪烁
本文关键字:闪烁 inputTextBox 自定义 | 更新日期: 2023-09-27 18:06:12
我在使用XNA 4.0创建输入框时遇到了困难。
我已经可以在inputTextbox中绘制和输入文本,但是当我输入时,我有两个问题发生了。
- 当我按住一个键时,我以为它会多次写那个角色,但它没有。我不知道为什么它没有。
- 当我按下一个键屏幕闪烁,我怎么解决?我已经尝试过通过翻转backbuffer或类似的东西太糟糕了,这不是解决方案
public TextboxInput(GraphicsDevice graphicsDevice, int width, SpriteFont font)
{
this.font = font;
var fontMeasurements = font.MeasureString("dfgjlJL");
var height = (int) fontMeasurements.Y;
renderTarget = new RenderTarget2D(graphicsDevice, width, height);
Text = new StringBuilder();
this.graphicsDevice = graphicsDevice;
spriteBatch = new SpriteBatch(graphicsDevice);
}
public void Update(GameTime gameTime)
{
if (!HasFocus)
{
return;
}
var keyboard = Keyboard.GetState();
foreach (var key in keyboard.GetPressedKeys())
{
if (!lastKeyboard.IsKeyUp(key))
{
continue;
}
if (key == Keys.Delete ||
key == Keys.Back)
{
if (Text.Length == 0)
{
continue;
}
Text.Length--;
renderIsDirty = true;
continue;
}
char character;
if (!characterByKey.TryGetValue(key, out character))
{
continue;
}
if (keyboard.IsKeyDown(Keys.LeftShift) ||
keyboard.IsKeyDown(Keys.RightShift))
{
character = Char.ToUpper(character);
}
Text.Append(character);
renderIsDirty = true;
}
lastKeyboard = keyboard;
}
public void PreDraw()
{
if (!renderIsDirty)
{
return;
}
graphicsDevice.Clear(BackgroundColor);
renderIsDirty = false;
graphicsDevice.SetRenderTarget(renderTarget);
spriteBatch.Begin();
spriteBatch.DrawString(font, Text, Vector2.Zero, ForegroundColor);
spriteBatch.End();
graphicsDevice.SetRenderTargets(null);
}
public void Draw()
{
spriteBatch.Begin();
spriteBatch.Draw(renderTarget, Position, Color.White);
spriteBatch.End();
}
对于闪烁,我认为你应该在你的draw方法中调用graphicsDevice.Clear(BackgroundColor)。
下面的代码说明了按住键不能获得更多字符的原因。它说只有当键的最后状态为up时才注册按键。
if (!lastKeyboard.IsKeyUp(key))
{
continue;
}