我想知道是否还有使用“Content.Load<>”在一个不是游戏本身的类中,假设我想从类中加载一个纹理,而不是将纹理发送给它。
namespace ProjectGame1
{
public class Ship
{
public Texture2D texture;
public Ship()
{
this.texture = Content.Load<Texture2D>("ship");
}
}
}
这是我正在努力实现的一个例子
答案 0 :(得分:8)
您只需将ContentManager传递给Ship对象:
public Ship(ContentManager content)
{
this.texture = content.Load<Texture2D>("ship");
}
从您的游戏类中实例化Ship:
Ship ship = new Ship(this.Content);
答案 1 :(得分:4)
首先,我建议 不使用DrawableGameComponent ,我的理由是outlined in this answer here。
现在,要使代码按原样运行,您需要将ContentManager
传递给您正在创建的构造函数(请参阅JoDG's answer)。但要做到这一点,你必须在ContentManager
准备就绪后才能构建它。对于Game
的内容管理员,这是在调用LoadContent
期间和之后(所以不是在游戏的结构或Initialize
方法中)。
现在,你可以使用DrawableGameComponent做一些像这样的事情,这样做更好:只需给你的Ship
课程一个LoadContent
方法,并从你的游戏中调用它#39 ; s LoadContent
(正如您对Draw
和Update
所做的那样)。
如果您的船舶使用的纹理不属于您船舶的状态(即:所有船只使用相同的纹理),您甚至可以将其设置为静态,从而使您无需拨打LoadContent
在你创造的每艘船上。我有一个例子是this answer here,它还有一个关于Content Manager的其他有用信息的列表。
答案 2 :(得分:3)
如果类派生形式为DrawableGameComponent
,那么您仍然可以使用
Game.Content.Load<Texture2D>("ship");
答案 3 :(得分:1)
为了使其发挥作用,您需要Constructor
接受Game
类型的参数。这意味着您需要添加对Microsoft.Xna.Framework.Game
的引用。
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
namespace ProjectGame1
{
public class Ship : DrawableGameComponent // Notice the class now inherits from
{ // DrawableGameComponent
public Texture2D texture;
public Ship(Game game)
: base(game) // <<---- Don't forget to pass Game to the base constructor
{
this.texture = game.Content.Load<Texture2D>("ship");
}
}
}
答案 4 :(得分:0)
我认为您需要引用Game对象才能获得Content
成员。这可以传入,也可以让游戏成为单身人士。
答案 5 :(得分:0)
好的,我解决了它,我使用了一种不同的方法,因为你的工作并没有像我期望的那样完成。 我做的是制作一个“public static ContentManager asd”;然后将其分配给Game的ContentManager,然后将其重定向到“Game1.asd” (变量名称是示例)