XNA C#-如何在不按下按钮的情况下按下按钮

XNA C#-如何在不按下按钮的情况下按下按钮,c#,button,xna,pressed,C#,Button,Xna,Pressed,我有一个开始的图像,当你按下回车键,它进入游戏。问题是,由于这是一个图像,必须按住按钮才能保持显示游戏屏幕。有没有办法让你按下按钮后,图像就消失了 Update Method: helpScreen = new HelpScreen(this); if (!helpScreen.gamestarted && Keyboard.GetState().IsKeyDown(Keys.Enter)) { helpScreen.gamestarted = true; } D

我有一个开始的图像,当你按下回车键,它进入游戏。问题是,由于这是一个图像,必须按住按钮才能保持显示游戏屏幕。有没有办法让你按下按钮后,图像就消失了

Update Method:

helpScreen = new HelpScreen(this); 

if (!helpScreen.gamestarted && Keyboard.GetState().IsKeyDown(Keys.Enter))
{
    helpScreen.gamestarted = true;
}

Draw Method:

if (!helpScreen.gamestarted)
{
    helpScreen.Draw(spriteBatch);
}

将状态存储在主游戏类中:

private bool gameStarted = false;
在更新方法中,检查输入:

if (!gameStarted && Keyboard.GetState().IsKeyDown(Keys.Enter))
{
    gameStarted = true;
}
如果游戏尚未开始,则稍后在绘制方法中仅绘制开始图像:

if (!gameStarted)
{
    helpScreen.Draw(spriteBatch);
}

这样,一旦玩家按下按钮,它就不会被再次绘制。另外,使用通用的
gameStarted
字段可以澄清您的意图,并且您可以以简单自然的方式将其他游戏逻辑基于其状态。

我可以问一下,您是否对输入进行了其他编码?还是从这个帮助屏幕开始?因为这涵盖了输入处理的基本知识

看起来你把它看作是一个事件驱动的系统,而实际上它是一个游戏循环。这意味着您在每个循环中检查一个值,并将输出基于该值,而不是通过事件(例如单击)

我要做的是记录上一个值,然后在下一个循环中,将该值与当前值进行比较。更新方法中的示例:

//Outside of Update loop declare
KeyboardState previousState = Keyboard.GetState();

//Inside update loop
if (Keyboard.GetState().IsKeyUp(Keys.Enter) && previousState.IsKeyDown(Keys.Enter))
{
        helpScreen = null;     }

按下并松开Enter(输入)按钮时,将触发此操作。我将对该代码执行许多其他更改,但这将为您指明解决此特定问题的正确方向。

您应该真正说明这是用什么编程语言编写的。给定样式!=null,这应该是c++/c-对吗?抱歉,忘了,这是c#并且是在XNAokay中完成的,我不是XNA的家伙,但最好不要使用“isKeyDown”来启动游戏(或者最好隐藏帮助屏幕以设置游戏可见?),而是一个“开始”屏幕(例如main),一旦按下enter键,就会以某种永久()循环调用游戏“就像一直按着键一样”如果你打破了这个永恒的循环,只需回到主循环,让用户有可能开始操作这只是代码的一小部分,此时,帮助屏幕显示为一个图像,然后当你按enter键时,它就会消失,显示正在后台运行的游戏,(我本可以使用游戏状态,但效果不好),问题是您必须按住enter按钮,而我希望它在按下按钮一次后继续。我已将上面的游戏编码更新为您建议的内容。屏幕会出现,当您按下enter键时,屏幕会转到游戏,但除非您按住enter键,否则它不会停留在游戏上-如果您松开enter键,则它不会返回o帮助屏幕。如果你完全按照我的建议做了,并且没有代码干扰,那么它必须工作。只需逐行检查:当应用程序启动时,gameStarted为false。Draw方法中的条件已满足;帮助屏幕已绘制。一旦用户按Enter键,更新方法中的条件为true,gameStarted将被激活设置为true。Draw方法中的条件现在为false,并且帮助屏幕在gameStarted再次设置为false之前不会被绘制。哦,成功了!非常感谢。我不得不将helpScreen=新的帮助屏幕(此);到LoadContent部分,而不是更新,它成功了!不久前我开始用XNA编码,这是一项工作。关于游戏和设计的一切都完成了,这个帮助屏幕/开始屏幕是我现在想要添加的东西,但不是真的需要。我本来会做不同的屏幕(即游戏结束、开始屏幕、游戏屏幕)使用public enum Gamestates等。但是使用我已经编写的代码,这是一个很大的麻烦,我已经尝试了三次,但都失败了。当你加载游戏时,会出现帮助屏幕,当你按enter键时,它会自动移除以显示游戏,但问题是当enter键被释放时,它会返回帮助屏幕,而不是隐藏Helpscreen。我知道这不是正确的方法,但我只是想在提交之前添加一些额外的内容。那么,上面的方法应该可以帮助您找到您想要的答案。感谢您的帮助,我通过将helpScreen=new helpScreen(this);移动到LoadContent()中,使其正常工作