XNA游戏组件

时间:2012-07-07 06:27:35

标签: xna xna-4.0 xnanimation

我对如何将变量值从1个游戏组件传递到另一个游戏组件感到困惑。 我正在使用xna 4.0。

我创建了两个游戏组件,即抽绳和输入管理器。 我想读取用户的键盘输入并将其传递到抽象字符串,它将更新位置。

我无法在抽象字符串(drawablegamecomponent)上添加组件。 我可以在课堂上完成,但不能在游戏组件上完成。 你们可以在这里发布一些例子吗?对于初学者。

1 个答案:

答案 0 :(得分:2)

使用GameComponent表示您想要在每一帧上调用Update的内容,并使用DrawableGameComponent表示您希望每个Draw调用的内容框架和LoadContent在适当时调用(在程序开始时,以及设备丢失时,例如用户按下 Ctrl-Alt-Del 在Windows上。)

对于InputManager,您可能需要Update方法,以便更新用户输入,因此InputManager可以是GameComponentDrawString听起来不像是必须的。这两个课听起来都像是服务。在游戏类的构造函数或Initialize方法中,执行以下操作:

Components.Add(mInputManager = new InputManager(this));
Services.AddService(typeof(InputManager), mInputManager);
Services.AddService(typeof(DrawString), mDrawString = new DrawString(this))

DrawString以及您想要获取游戏服务的任何其他类都需要对Game对象的引用。)

(请注意,GameComponent不一定需要是服务,服务不一定需要GameComponent s。要获得Update和/或{{1}要被调用,你必须单独调用Draw;要使一个对象可以作为服务检索,你必须调用Components.Add(...))。

然后,当您想在其他游戏组件(或您已通过对游戏对象的引用的任何类)中使用Services.AddService(...)InputManager服务时,您可以执行以下操作:

DrawString

就个人而言,我写了一个扩展方法,使其更简洁:

InputManager input = (InputManager)Game.Services.GetService(typeof(InputManager));

获取输入服务的行将变为:

using XNAGame = Microsoft.XNA.Framework.Game;

...

   public static T GetService<T>(this XNAGame pXNAGame)
   {
      return (T)pXNAGame.Services.GetService(typeof(T));
   }