我一直在为我正在上课的XNA项目工作。我有一个问题,我正在为“坏人”制作一个雪人(该类叫做Snowman.cs)。我无法让程序编译,这让我发疯。有人帮我解决了我认为Snowman.cs类的一些可靠代码:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
using CameraViewer;
namespace MGH10_Skybox
{
public class Snowman : DrawableGameObject
{
private Camera cam = new Camera();
Model snowMan;
Matrix[] snowManMatrix;
protected override void LoadContent()
{
//snowMan = Content.Load<Model>( "Models\\snowman" );
snowManMatrix = new Matrix[snowMan.Bones.Count];
snowMan.CopyAbsoluteBoneTransformsTo(snowManMatrix);
}
public void DrawSnowMan(Model model, GameTime gameTime)
{
foreach (ModelMesh mesh in model.Meshes)
{
Matrix world, scale, translation;
scale = Matrix.CreateScale(0.02f, 0.02f, 0.02f);
translation = Matrix.CreateScale(0.0f, 0.7f, -4.0f);
world = scale * translation;
foreach (BasicEffect effect in mesh.Effects)
{
effect.World = snowManMatrix[mesh.ParentBone.Index] * world;
effect.View = cam.viewMatrix;
effect.Projection = cam.projectionMatrix;
effect.EnableDefaultLighting();
}
mesh.Draw();
}
}
protected override void Draw(GameTime gameTime)
{
DrawSnowMan(snowMan, gameTime);
}
}
}
我的问题是我一直收到编译错误,上面写着“找不到类型或命名空间名称'DrawableGameObject'(你错过了使用指令或程序集引用吗?)”。
我已经尝试过对Google进行各种研究,但我几乎没有得到DrawableGameObject的结果,但任何谈论它的事情(或者至少在页面预览中都说过)通常都会使用 DrawableGameComponent 相反。
我尝试过使用DrawableGameComponent,但后来我遇到了更多的编译器错误,这让我觉得它确实是不我正在寻找的东西。具体来说,错误声明“DrawableGameComponent不包含一个带'0'参数的构造函数”(这违背了我的类及其调用的构造方式)。
我所拥有的一线希望是'DrawableGameObject'应该是.net 4.0类,我一直在使用XNA 3.1 w / Visual C#2008(显然不支持4.0)。所以我下载了XNA 4.0和Visual C#Express 2010,当我改变目标框架时发现崩溃和烧毁只是为了找到完全变灰的选项(即使在开始一个全新的项目时)。
所有帮助非常赞赏。
答案 0 :(得分:2)
似乎你真的想要“DrawableGameComponent”,因为我找不到任何关于“DrawableGameObject”类的内容。尝试从DrawableGameComponent继承时获得的错误可以通过在类构造函数中使用适当的参数调用基础构造函数来修复,如下所示:
public Snowman(Game game) : base(game)
{
//Whatever goes here!
}
基础构造函数中的“game”应该是DrawableGameComponent附加到的Game对象。
修改强>
根据您的最新评论,我建议您将此构造函数添加到您的类中(也就是说,替换我之前使用此构造函数建议的内容):
public Snowman(Game game, Model snowman) : base(game)
{
this.snowman = snowman;
}
在你的Game1.cs中,你的LoadContent函数或你当前正在调用的任何地方“snowMan = Content.Load(”Models \ snowman“);”,试试这个:
snowMan = new Snowman(this, Content.Load<Model>("Models\\snowman");
这将创建一个新的Snowman实例,并初始化“Model snowman”字段。
答案 1 :(得分:0)
所以...如果你找不到课,那就自己做吧!
Anywho,我猜DrawableGameObject应该可以让它更容易更新并在游戏引擎中绘制不同类型的对象,但是如果你只将它用于雪人(我猜你也不会提及其他代码不工作..)你可能没有它!
因此,删除该类的继承,并从这些方法中删除覆盖。隐藏DrawSnowMan方法(即使其成为私有),并使LoadContent和Draw公开,并从Game类中的相应方法调用它们!
另外,我建议建立一个机制来在不同的位置绘制你的雪人,或者如果你想拥有SnowMan类的多个实例,将模型移到其他地方(他们会分享它,所以你可以节省一些记忆,不必要地重复它。)
希望我帮助了一些,但如果您正在寻找一个涉及查找DrawableGameObject类的答案,那么抱歉。