类型或命名空间名称'DrawableGameObject'找不到
本文关键字:DrawableGameObject 找不到 命名空间 类型 | 更新日期: 2023-09-27 18:17:33
我一直在为我正在上的课做一个XNA项目。我有一个问题,我正在为"坏人"雪人(类被称为Snowman.cs)。我无法编译这个程序,这快把我逼疯了。有人帮我写了一些我认为是雪人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'找不到(你错过了使用指令或汇编引用吗?)"。
我试过在谷歌上做各种各样的研究,我几乎没有得到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,并寄予了很高的希望,当我去改变目标框架时,却发现选项完全变灰了(即使开始一个全新的项目)。
所有帮助非常感谢。
看起来好像你实际上想要"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函数或任何你目前调用"雪人=内容。加载("Models'snowman");",试试这个:
snowMan = new Snowman(this, Content.Load<Model>("Models''snowman");
这将创建一个新的雪人实例,初始化"模型雪人"字段。
所以…如果你找不到课程,那就自己做吧!
任何人,我猜DrawableGameObject应该使它易于更新和绘制不同类型的对象在游戏引擎中,但如果你只使用它的雪人(我猜,因为你没有提到其他代码不工作…),你不妨没有它!
因此删除那个类的继承,并从那些方法中删除重写。隐藏draw雪人方法(即使其私有),并使LoadContent和Draw公共,并从各自的方法在你的游戏类调用它们!
另外,我建议建立一个机制来绘制雪人在不同的位置,或者如果你想有雪人类的多个实例,将模型移动到其他地方(他们将共享它,所以你可以通过不复制它来节省一些内存)。
希望我帮助了一些,虽然如果你正在寻找一个答案,涉及找到DrawableGameObject类然后抱歉。