Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 再次重新装填一个精灵_C#_Xna_Monogame - Fatal编程技术网

C# 再次重新装填一个精灵

C# 再次重新装填一个精灵,c#,xna,monogame,C#,Xna,Monogame,我正在用Monogame制作一个2D游戏。我的角色可以很好地加载到游戏中,但是当用户按下T键时,我希望我的角色再次重新加载(就像角色已经远程传送一样) 我在LoadContent()函数中加载了播放器内容,如下所示: player.Load(Content); 在Draw()函数中,我尝试在按下“T”时再次重新加载字符,方法是: if (Keyboard.GetState().IsKeyDown(Keys.T)) { player.Draw(spriteBatch); } 和/或 i

我正在用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类中使用的
player.Load()
方法:

public void Load (ContentManager Content)
{
    texture = Content.Load<Texture2D>("danPlayer");    
}
公共无效加载(ContentManager内容)
{
纹理=Content.Load(“danPlayer”);
}

您已经有了加载角色的功能,这很好。现在:
1)
Draw
功能用于绘图。它是从游戏中异步运行的。所有游戏逻辑都应该在
更新功能中。
2) 您必须知道如何检查键盘按钮是否被单击,而不是是否被按下,因为这样,只要您按住“T”键,字符就会加载。无论您以多快的速度单击“T”键,您都会启动
Load
功能至少2-3次。
3) 要检查这一点,您需要两个变量来保存键盘的当前和最后状态,并且所有游戏逻辑都应该处于新旧键盘状态更新之间。您还可以创建一个简单的函数来检查
单击(按键)
按住(按键)


您已经有了加载角色的函数,这很好。现在:
1)
Draw
功能用于绘图。它是从游戏中异步运行的。所有游戏逻辑都应该在
更新功能中。
2) 您必须知道如何检查键盘按钮是否被单击,而不是是否被按下,因为这样,只要您按住“T”键,字符就会加载。无论您以多快的速度单击“T”键,您都会启动
Load
功能至少2-3次。
3) 要检查这一点,您需要两个变量来保存键盘的当前和最后状态,并且所有游戏逻辑都应该处于新旧键盘状态更新之间。您还可以创建一个简单的函数来检查
单击(按键)
按住(按键)


如果您以通常的方式使用XNA,则不希望调用
Load
来重新加载播放器。该功能通常仅用于加载玩家的资产,主要是图像

在代码中的某个地方应该有一些方法,您可以在其中初始化播放器的某些方面,比如位置,或者某种状态。你要做的是每当按下T时调用该代码


我会参考孟赛特先生关于如何获得你的按键的回答。我还建议你选一本关于XNA的书,因为我在这本书上看到的大多数问题都是关于这些书中经常涉及的事情。我最初从中了解到的是,这似乎可能是你的速度。

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

在代码中的某个地方应该有一些方法,您可以在其中初始化播放器的某些方面,比如位置,或者某种状态。你要做的是每当按下T时调用该代码


我会参考孟赛特先生关于如何获得你的按键的回答。我还建议你选一本关于XNA的书,因为我在这本书上看到的大多数问题都是关于这些书中经常涉及的事情。我最初从中学到的是,这似乎是你的速度。

你能发布你的player.Load()方法的代码吗?我更新了显示我的player.Load()方法的问题,它非常简单。对,所以所做的就是从文件中加载你的纹理。唯一一次你会再次调用它是如果纹理发生了变化或者你不知何故丢失了对它的引用。不是为了改变角色的位置。你能发布你的player.Load()方法的代码吗?我已经更新了显示我的player.Load()方法的问题,它非常简单。对,所以所做的就是从文件中加载你的纹理。唯一一次你会再次调用它是如果纹理发生了变化或者你不知何故丢失了对它的引用。不用于更改角色的位置。
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);
}