我正在使用Monogame制作2D游戏。我的角色加载到游戏中很好,但是当用户按下 T 键时,我希望我的角色再次重新加载(好像角色已经传送了。)
我已将播放器内容加载到LoadContent()
函数中,如下所示:
player.Load(Content);
在Draw()
函数中,当我按下“T”时,我试图再次重新加载角色:
if (Keyboard.GetState().IsKeyDown(Keys.T))
{
player.Draw(spriteBatch);
}
和/或,
if (Keyboard.GetState().IsKeyDown(Keys.T))
{
player.Load(Content);
}
但这些似乎都不起作用。
我的问题是,再次成功加载角色的正确方法是什么?我在哪里放置if语句?
更新
这是播放器类中使用的player.Load()
方法:
public void Load (ContentManager Content)
{
texture = Content.Load<Texture2D>("danPlayer");
}
答案 0 :(得分:2)
你已经有了加载角色的功能,这很好。现在:
1) Draw
函数用于绘图。它从游戏中运行(某种程度)异步。您的所有游戏逻辑都应该在Update
函数中
2)你必须知道如何检查是否点击了键盘按钮,而不是是否按下了键盘按钮,因为这样,只要你按住键盘,角色就会Load
&#39; T&#39;键。无论您点击多快,T&#39; T&#39;关键,你这样做的方式,你至少要激活Load
功能2-3次。
3)要检查这一点,您需要2个变量来保持键盘的当前和最后状态,并且所有游戏逻辑都应该在新旧键盘状态的更新之间。您还可以创建一个简单的函数来检查Click(Keys key)
和Hold(Keys key)
KeyboardSate ksNew, ksOld;
protected override void Update (GameTime gameTime)
{
ksNew = KeyboardSate.GetState();
*your logic here*
if (Click(Keys.T))
player.Load(Content);
ksOld = ksNew;
}
private bool Click(Keys key)
{
return ksNew.IsKeyDown(key) && ksOld.IsKeyUp(key);
}
private bool Hold(Keys key)
{
return ksNew.IsKeyDown(key);
}
答案 1 :(得分:1)
如果您按常规方式使用XNA,则无法致电Load
重新加载播放器。该功能通常仅用于加载播放器的资源,主要是图片。
在代码的某处,应该有一些方法可以初始化播放器的各个方面,例如位置和某种状态。你做的是你想在每次按下T时调用该代码。
我会参考Monset关于如何获得按键的答案。我还建议你购买一本关于XNA的书,因为我在SO上看到的大部分问题都与这些书中经常出现的问题有关。我最初从中学到的是Learning XNA,这似乎可能是你的速度。