我的C#XNA游戏的玩家类

时间:2010-10-08 19:43:11

标签: c# class xna

我通常会在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)
        {

        }
    }
}

但是我收到一个错误,我无法解决如何解决。错误是:

  

加载“播放器”时出错。的GraphicsDevice   找不到组件。

将它扔到这一行:PlayerTexture = Content.Load<Texture2D>("Player");

我在主游戏课中看到有这一行:Graphics = new GraphicsDeviceManager(this);但我不知道如何处理它。我将它传递给我的Player课程,还是什么?

感谢任何帮助,谢谢。

5 个答案:

答案 0 :(得分:6)

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

现在讨论代码中的问题:

首先,为了加载内容,需要初始化图形设备。在LoadContent中调用Microsoft.Xna.Framework.Game之前,它尚未初始化。这是explained in the documentation

  

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

所以移动你的加载代码:

protected override void LoadContent()
{
    PlayerTexture = Content.Load<Texture2D>("Player");
    PlayerPosition = Vector2.Zero;
    base.LoadContent();
}

注意它是一个覆盖(受保护方法)。我真的不想在这里解释这意味着什么,但我建议你找出来。

此外,您会发现DrawUpdate应该被类似地重写,因为它们将从XNA调用。

现在,这是重要的一点:如果您从XNA Game类继承游戏类,我刚刚告诉您的内容适用。通过将其称为“播放器”,您表示对类的工作方式存在误解。

如果您正在制作“玩家”课程,请在your other question的答案中查看您被告知的内容。

您可能还会发现this recent question值得一读。

答案 1 :(得分:2)

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

尝试重写LoadGraphicsContent方法以加载您的内容。如this tutorial

所示
    protected override void LoadGraphicsContent(bool loadAllContent)
    {
        if (loadAllContent)
        {
            spriteBatch = new SpriteBatch(graphics.GraphicsDevice);
            // TODO: Load any ResourceManagementMode.Automatic content
            t2dMap = content.Load<Texture2D>(@"content\textures\map_display");
            t2dColorKey = content.Load<Texture2D>(@"content\textures\map_colorkey");
        }
        // TODO: Load any ResourceManagementMode.Manual content
    }

答案 2 :(得分:1)

最近在XNA中,您现在可以右键单击某些选项并让Intellisense为您修复它。因此,当您声明时,右键单击Texture2D和Rectangle,您应该能够选择“Resolve”,它会要求您选择“使用”其他库,以便它可以编译。看看是否能解决您的问题。但是,通常我会使用这个类,但它运行良好。

答案 3 :(得分:0)

对我有用的清单:

  • 尝试将字体放在内容项目的根文件夹中
  • 确保Build Action设置为Compile
  • 验证.spritefont文件的内容(使用此问题作为参考)
  • 确保您已进入生命周期的LoadContent或更晚

答案 4 :(得分:-2)

认为我曾经有类似的错误。

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

转到“属性”。

如果游戏个人资料为“Hi Def”,请更改为“Reach”。

重新编译并运行。