我有这个问题。我已经编程了我的射击游戏,当我不得不在这里问这么多问题时,我走到了尽头
if(key State.IsKeyDown(Keys.Space))
{
Shoot Bullets();
}
问题是当我按住空格键时它会射击....我不想持有太空条30分钟才结束关卡。我想让它切换。 什么是最好和最少编码的方式来做到这一点。 我确实花了2天时间试图解决这个问题,我不能......帮助将不胜感激
答案 0 :(得分:0)
而不是"拍摄子弹",翻转布尔变量的值。并使用该变量作为指示是否应该在任何给定的游戏循环迭代中发射一些项目符号。
这样的事情:
public class MyGame : Microsoft.Xna.Framework.Game
{
/* Some other state */
bool isShooting = false;
/* Some other methods */
protected override void Update(GameTime gameTime)
{
/* Some other code */
if(keyState.IsKeyDown(Keys.Space))
{
// Flip the boolean value. If it was failse, set it to and vice versa
isShooting = !isShooting; true.
}
if(isShooting)
{
Shoot.Bullets();
}
}
}
答案 1 :(得分:0)
正如@folkol建议的那样:
包括:
bool Shoot;
并初始化为:
Shoot = false;
您检查输入的内容
if(key State.IsKeyDown(Keys.Space)) // Need to flip on key release
Shoot = !Shoot // Flips the variable
在更新()方法中:
if(Shoot)
Shoot Bullets(); // Shoots
请注意,这将大大翻转Shoot
变量。您需要创建oldState
值并翻转密钥释放。
答案 2 :(得分:0)
我为你添加了另一个简短但正确的例子,其他一些答案几乎就在那里,但在它们中有一些错误。
KeyboardState kbState;
bool isShooting;
protected override void Update(GameTime gameTime)
{
KeyboardState lastkbState = kbState;
kbState = Keyboard.GetState();
if (kbState.IsKeyDown(Keys.Space) && lastkbState.IsKeyUp(Keys.Space))
{
isShooting = !isShooting;
}
if (isShooting)
{
Shoot.Bullets();
}
}
你的另一个答案我没有使用reptuation添加注释不起作用,因为你使前一个和当前的键盘状态属性相同。