【问题标题】:XNA C# - How to make a button pressed without being pressedXNA C# - 如何在不被按下的情况下按下按钮
【发布时间】:2012-12-07 20:43:02
【问题描述】:

我有一个起始图像,当您按下回车键时,它会进入游戏。问题是因为这是一张图片,所以必须按住按钮才能保持显示游戏画面。有没有办法让它一旦你按下按钮,图像就会保持关闭状态?

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);
}

【问题讨论】:

  • 你应该真正说明这是什么编程语言。给定样式!= null,这应该是 c++/c - 对吧?
  • 抱歉,忘记了,它的 C# 并在 XNA 中完成
  • 好吧,我不是 XNA 人,但最好不要使用“isKeyDown”来启动游戏(或者最好隐藏帮助屏幕以设置游戏可见?)但是一旦你按下回车,一个“开始”屏幕(例如主屏幕)会在某种永远()循环中调用你的游戏,而不是“就像一直按下键一样”。如果你打破这个永远的循环,只需回到你的主循环并让用户有可能重新开始
  • 这是一小部分代码,此时帮助画面显示为图像,然后当你按下回车键时它会消失以显示在后台运行的游戏,(我本来可以使用游戏状态,但效果不佳),问题是您必须按住回车按钮,而我希望一旦按下按钮就可以去。

标签: c# button xna pressed


【解决方案1】:

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

private bool gameStarted = false;

在您的更新方法中检查输入:

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

稍后在你的draw方法中只绘制开始图像,如果游戏还没有开始:

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

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

【讨论】:

  • 我已经按照您的建议更新了上面的游戏编码。屏幕出现,当您按 Enter 时,屏幕进入游戏,但除非您按住 Enter,否则它不会停留在游戏中 - 如果您松开 Enter,则会返回帮助屏幕。
  • 如果您完全按照我的建议进行操作并且没有代码干扰,那么它必须起作用。一行一行的看一遍:应用程序启动时,gameStarted 为 false。满足 Draw 方法中的条件; 帮助屏幕已绘制。一旦用户按下 Enter,update 方法中的条件为 true,并且 gameStarted 将设置为 true。 Draw 方法中的条件现在为 false,并且在 gameStarted 再次设置为 false 之前,不会绘制 helpScreen
  • 哦,成功了!万分感谢。我不得不移动 helpScreen = new HelpScreen(this);到 LoadContent 部分而不是更新,它起作用了!
【解决方案2】:

请问,您是否对输入进行了其他编码?或者您是从这个帮助屏幕开始的?因为这涵盖了输入处理的基础知识。

您似乎将其视为事件驱动系统,而实际上它是一个游戏循环。这意味着您检查每个循环的值并以此为基础输出,而不是通过事件(例如点击)

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

//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 按钮时触发。我会对该代码执行许多其他更改,但这应该为您指明解决此特定问题的正确方向。

【讨论】:

  • 我不久前开始在 XNA 中进行编码,这是一项工作。关于游戏和设计的一切都完成了,这个帮助屏幕/开始屏幕是我现在想添加的东西,但实际上并不是必需的。我会使用公共枚举 Gamestates 等完成不同的屏幕(即游戏结束、开始屏幕、游戏屏幕)。但是使用我已经拥有的编码,这是一个很大的麻烦,我已经尝试了 3 次失败.
  • 加载游戏时会出现helpScreen,当你按下回车时,它会自行移除以显示游戏,但问题是当你释放回车时,它会回到helpScreen而不是完全隐藏帮助屏幕。我知道这不是正确的做法,但我只是想在提交之前添加一些额外的东西。
  • 那么上面的方法应该可以帮助你找到你想要的答案。
  • 感谢您的帮助,我设法通过移动 helpScreen = new HelpScreen(this);进入 LoadContent()
猜你喜欢
  • 2021-11-27
  • 2016-07-10
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 2011-01-01
相关资源
最近更新 更多