Monogame - 重新加载精灵
Monogame - Reload a sprite again
我正在使用 Monogame 制作 2D 游戏。我的角色可以很好地加载到游戏中,但是当用户按下 T 键时,我希望我的角色再次重新加载(就像角色已经传送一样。)
我已经在 LoadContent()
函数中加载了播放器内容,如下所示:
player.Load(Content);
并且在 Draw()
函数中,我尝试在按下 'T' 时再次重新加载角色:
if (Keyboard.GetState().IsKeyDown(Keys.T))
{
player.Draw(spriteBatch);
}
and/or、
if (Keyboard.GetState().IsKeyDown(Keys.T))
{
player.Load(Content);
}
但这些似乎都不起作用。
我的问题是,再次成功加载角色的正确方法是什么?我应该把这个 if 语句放在哪里?
更新:
这是我在播放器中使用的 player.Load()
方法 class:
public void Load (ContentManager Content)
{
texture = Content.Load<Texture2D>("danPlayer");
}
你已经有加载角色的功能了,很好。现在:
1) Draw
函数用于绘图。它与游戏 运行(有点)不同步。您所有的游戏逻辑都应该在 Update
函数中。
2) 你必须知道如何检查键盘按钮是否被点击,而不是它是否被按住,因为这样,只要你按下,角色就会 Load
正在按住 'T' 键。无论您点击 'T' 键的速度有多快,您的操作方式如何,您都会至少触发 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);
}
如果您以通常的方式使用 XNA,则不想调用 Load
来重新加载播放器。该函数通常仅用于加载播放器的资产,主要是图像。
在您的代码中的某处应该有一些方法,您可以在其中初始化播放器的各个方面,例如位置和某种状态。您要做的是在按下 T 时调用该代码。
我会参考 Monset 关于如何获得按键的回答。我还建议您阅读一本关于 XNA 的书,因为我在 SO 上看到的大多数问题都是关于此类书籍中经常涵盖的内容。最开始学的是Learning XNA,好像是你的速度
我正在使用 Monogame 制作 2D 游戏。我的角色可以很好地加载到游戏中,但是当用户按下 T 键时,我希望我的角色再次重新加载(就像角色已经传送一样。)
我已经在 LoadContent()
函数中加载了播放器内容,如下所示:
player.Load(Content);
并且在 Draw()
函数中,我尝试在按下 'T' 时再次重新加载角色:
if (Keyboard.GetState().IsKeyDown(Keys.T))
{
player.Draw(spriteBatch);
}
and/or、
if (Keyboard.GetState().IsKeyDown(Keys.T))
{
player.Load(Content);
}
但这些似乎都不起作用。
我的问题是,再次成功加载角色的正确方法是什么?我应该把这个 if 语句放在哪里?
更新:
这是我在播放器中使用的 player.Load()
方法 class:
public void Load (ContentManager Content)
{
texture = Content.Load<Texture2D>("danPlayer");
}
你已经有加载角色的功能了,很好。现在:
1) Draw
函数用于绘图。它与游戏 运行(有点)不同步。您所有的游戏逻辑都应该在 Update
函数中。
2) 你必须知道如何检查键盘按钮是否被点击,而不是它是否被按住,因为这样,只要你按下,角色就会 Load
正在按住 'T' 键。无论您点击 'T' 键的速度有多快,您的操作方式如何,您都会至少触发 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);
}
如果您以通常的方式使用 XNA,则不想调用 Load
来重新加载播放器。该函数通常仅用于加载播放器的资产,主要是图像。
在您的代码中的某处应该有一些方法,您可以在其中初始化播放器的各个方面,例如位置和某种状态。您要做的是在按下 T 时调用该代码。
我会参考 Monset 关于如何获得按键的回答。我还建议您阅读一本关于 XNA 的书,因为我在 SO 上看到的大多数问题都是关于此类书籍中经常涵盖的内容。最开始学的是Learning XNA,好像是你的速度