我的C#XNA游戏的玩家级
我通常会在XNA论坛上寻求帮助,但他们现在不在,所以我来到这里 我正在制作一个新的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;
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调用
现在,重要的一点是:如果您从XNAgame
类继承游戏类,那么我刚才告诉您的内容适用。通过称它为“玩家”,你表明了对类如何工作的误解
如果你正在上一门“玩家”课,看看你在回答问题时听到了什么
您可能也会发现值得一读。最近在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();
}