我通常会在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
课程,还是什么?
感谢任何帮助,谢谢。
答案 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();
}
注意它是一个覆盖(受保护方法)。我真的不想在这里解释这意味着什么,但我建议你找出来。
此外,您会发现Draw
和Update
应该被类似地重写,因为它们将从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”。
重新编译并运行。