Monogame - 再次重新加载精灵

时间:2016-04-23 05:21:05

标签: c# xna monogame

我正在使用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");    
}

2 个答案:

答案 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,这似乎可能是你的速度。