我的C#XNA游戏的玩家级

我的C#XNA游戏的玩家级,c#,class,xna,C#,Class,Xna,我通常会在XNA论坛上寻求帮助,但他们现在不在,所以我来到这里 我正在制作一个新的XNA游戏,我想有一个玩家类。目前,我有一个主要的游戏类,名为Dots。这代表了主要的游戏。这就是我的Player课程目前的布局: namespace Dots { class Player : Microsoft.Xna.Framework.Game { Texture2D PlayerTexture; Vector2 PlayerPosition;

我通常会在XNA论坛上寻求帮助,但他们现在不在,所以我来到这里

我正在制作一个新的XNA游戏,我想有一个玩家类。目前,我有一个主要的游戏类,名为
Dots
。这代表了主要的游戏。这就是我的
Player
课程目前的布局:

namespace Dots
{
    class Player : Microsoft.Xna.Framework.Game
    {
        Texture2D PlayerTexture;
        Vector2 PlayerPosition;

        public Player()
        {
            Content.RootDirectory = "Content";
            PlayerTexture = Content.Load<Texture2D>("Player");
            PlayerPosition = Vector2.Zero;
        }

        public void Update()
        {

        }

        public void Draw(SpriteBatch SpriteBatch)
        {

        }
    }
}
名称空间点
{
职业玩家:Microsoft.Xna.Framework.Game
{
纹理2D播放器纹理;
矢量2播放位置;
公共玩家()
{
Content.RootDirectory=“Content”;
PlayerTexture=Content.Load(“播放器”);
PlayerPosition=Vector2.0;
}
公共无效更新()
{
}
公共作废抽签(SpriteBatch SpriteBatch)
{
}
}
}
但是我遇到了一个我无法解决的错误。错误是:

加载“播放器”时出错。图形设备 找不到组件

它把它扔到这行:
PlayerTexture=Content.Load(“Player”)

我看到在主游戏类中有这样一行:
Graphics=newgraphicsdevicemanager(this)播放器
类,还是什么


感谢您的帮助。

更新:对于旧版本的XNA,这个答案显然是正确的。有关当前正在使用的内容,请参阅

尝试重写LoadGraphicsContent方法以加载内容。如中所示

protected override void LoadGraphicsContent(bool loadAllContent)
{
if(loadAllContent)
{
spriteBatch=新spriteBatch(graphics.GraphicsDevice);
//TODO:加载任何资源管理模式。自动内容
t2dMap=content.Load(@“content\textures\map\u display”);
t2dColorKey=content.Load(@“content\textures\map_colorkey”);
}
//TODO:加载任何资源管理模式。手动内容
}

我想我曾经犯过类似的错误

右键单击解决方案资源管理器中的解决方案

转到属性

如果游戏配置文件为“高清”。。改为“到达”


重新编译并运行。

首先,您似乎对类(和名称空间)的工作方式缺乏了解。我建议(正如我在对你的另一个问题的评论中所做的那样)首先做一个不需要上课的简单游戏

现在谈谈代码中的问题:

首先,为了加载内容,需要初始化图形设备。在
Microsoft.Xna.Framework.Game
中调用
LoadContent
之前,它不会初始化。这是:

此方法由Initialize调用。此外,每当需要重新加载游戏内容时,例如当DeviceSet事件发生时,都会调用它。在调用LoadContent之前,不应访问GraphicsDevice

因此,请移动您的加载代码:

protected override void LoadContent()
{
    PlayerTexture = Content.Load<Texture2D>("Player");
    PlayerPosition = Vector2.Zero;
    base.LoadContent();
}
protected override void LoadContent()
{
PlayerTexture=Content.Load(“播放器”);
PlayerPosition=Vector2.0;
base.LoadContent();
}
请注意它是如何重写(受保护的方法)的。我真的不想解释这意味着什么,但我建议你找出答案

此外,您会发现
Draw
Update
应该被类似地覆盖,因为它们将从XNA调用

现在,重要的一点是:如果您从XNA
game
类继承游戏类,那么我刚才告诉您的内容适用。通过称它为“玩家”,你表明了对类如何工作的误解

如果你正在上一门“玩家”课,看看你在回答问题时听到了什么


您可能也会发现值得一读。

最近在XNA中,您现在可以右键单击某些选项,让Intellisense为您修复它。所以,在声明时,通过右键单击Texture2D和Rectangle,您应该能够选择“Resolve”,它将要求您选择“using”其他库,以便它可以编译。看看这是否能解决你的问题。但是,一般来说,尤其是在课堂上,我会使用这个,而且效果很好。

一份对我有用的清单:

  • 尝试将字体放在内容项目的根文件夹中
  • 确保
    构建操作
    设置为
    编译
  • 验证
    .spritefont
    文件的内容(将此问题用作参考)
  • 确保您处于生命周期中的
    LoadContent
    或更高版本

不熟悉XNA,但暗示您不应该在constructor.Arg中加载内容。那我就不知道该怎么做我想做的事了。我将不得不等到XNA论坛再次开放,看看他们是怎么做的。为什么不在这里问一下呢?XNA程序员是。。。嗯,程序员。。。这就是StackOverflow的作用。对不起,我不是说我要等到他们的论坛上线。但是在那里询问可能更好,因为他们的帮助论坛毕竟是专门针对XNA框架的。
LoadGraphicsContent
已经过时很久了。@Andrew Russell:谢谢,Andrew。尽管我对XNA不熟悉,但我一直在努力帮助OP。我会把这个答案留在这里,以防别人无意中发现。这,连同你对这个问题的评论和回答,应该有助于引导人们在未来走向正确的方向。
protected override void LoadContent()
{
    PlayerTexture = Content.Load<Texture2D>("Player");
    PlayerPosition = Vector2.Zero;
    base.LoadContent();
}