【问题标题】:Monogame - Reload a sprite againMonogame - 再次重新加载精灵
【发布时间】:2016-04-29 06:41:18
【问题描述】:

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

【问题讨论】:

  • 你能贴出你的 player.Load() 方法的代码吗?
  • 我已经更新了显示我的 player.Load() 方法的问题,非常简单。
  • 对,所以所做的就是从文件中加载你的纹理。唯一一次你会再次调用它是纹理发生变化或者你以某种方式丢失了对它的引用。不是为了改变角色的位置。

标签: c# xna monogame


【解决方案1】:

你已经有了加载角色的功能,这很好。现在:
1) Draw 函数用于绘图。它与游戏(某种)异步运行。您所有的游戏逻辑都应该在 Update 函数中。
2) 您必须知道如何检查键盘按钮是否被点击,而不是是否被按住,因为这样,只要您按住“T”键,角色就会Load。无论您以多快的速度点击“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);
}

【讨论】:

    【解决方案2】:

    如果您以通常的方式使用 XNA,您不想调用Load 来重新加载播放器。该函数通常仅用于加载播放器的资产,主要是图像。

    您的代码中的某处应该有一些方法可以用来初始化播放器的各个方面,例如位置,也许还有某种状态。您所做的是您想在按下 T 时调用该代码。

    我会参考 Monset 关于如何获取按键的答案。我还建议买一本关于 XNA 的书,因为我在 SO 上看到的大多数问题都是关于此类书中经常涉及的内容。我最初是从Learning XNA那里学到的,看起来可能是你的速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多