XNA 游戏组件

标签 xna xna-4.0

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

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

我无法在drawstring(drawablegamecomponent)上添加组件。 我可以在类里面做到这一点,但不能在游戏组件上做到。 你们可以在这里发布一些例子吗?对于初学者。

最佳答案

使用 GameComponent 来实现您希望在每一帧上调用 Update 的功能,并使用 DrawableGameComponent 实现您希望在每帧上调用 Update 的功能在每个帧上调用 Draw 并在适当的时候调用 LoadContent(在程序开始时,以及每当设备丢失时,例如当用户按下 时) Ctrl-Alt-Del(Windows 上)。

对于InputManager,您可能需要一个Update方法,以便您可以保持用户输入更新,因此InputManager可以是一个游戏组件DrawString 听起来并不像它需要的那样。这两个类听起来都可以是服务。在游戏类的构造函数或 Initialize 方法中,执行如下操作:

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

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

(请注意,GameComponent 不一定是服务,服务也不一定需要是 GameComponent。要获取 Update 和/或 Draw 要被调用,您必须单独调用 Components.Add(...); ,要获取可作为服务检索的对象,您必须调用 Services.AddService(...))。

然后,当您想在其他游戏组件(或您已传递对游戏对象的引用的任何类)中使用 InputManagerDrawString 服务时,你可以这样做:

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));
   }

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

InputManager input = Game.GetService<InputManager>();

关于XNA 游戏组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11372818/

相关文章:

c# - Collada (dae) 可以用作内容吗?

c# - 具有非常快的迭代和良好的添加和删除速度的集合

c# - 如何检查鼠标左键是否双击?

c# - 在 XNA 中模拟重力

windows-phone-7 - Farseer 物理引擎 3.1 with Mango

c# - 播放时加载纹理