我对如何将变量值从一个游戏组件传递到另一个感到困惑。我正在使用 xna 4.0。
我创建了两个游戏组件,拉绳和输入管理器。我想读取用户的键盘输入并将其传递到将更新位置的拉绳上。
我无法在drawstring(drawablegamecomponent)上添加组件。我可以在课堂上做,但不能在游戏组件上做。你们能在这里发布一些例子吗?对新手而言。
我对如何将变量值从一个游戏组件传递到另一个感到困惑。我正在使用 xna 4.0。
我创建了两个游戏组件,拉绳和输入管理器。我想读取用户的键盘输入并将其传递到将更新位置的拉绳上。
我无法在drawstring(drawablegamecomponent)上添加组件。我可以在课堂上做,但不能在游戏组件上做。你们能在这里发布一些例子吗?对新手而言。
用于GameComponent
您希望Update
在每一帧上调用的东西,并DrawableGameComponent
用于您想要Draw
在每一帧上LoadContent
调用并在适当时调用的东西(在程序开始时,以及每当设备丢失时,例如当用户在 Windows 上按下Ctrl-Alt-Del时)。
因为InputManager
您可能需要一种Update
方法,以便您可以更新用户输入,因此InputManager
可以是GameComponent
. DrawString
听起来不需要。这两个类听起来都像是服务。Initialize
在游戏类的构造函数或方法中,执行以下操作:
Components.Add(mInputManager = new InputManager(this));
Services.AddService(typeof(InputManager), mInputManager);
Services.AddService(typeof(DrawString), mDrawString = new DrawString(this))
(DrawString
以及您想要从中获取游戏服务的任何其他类都需要对该Game
对象的引用。)
(请注意,GameComponent
s 不一定必须是服务,服务也不一定必须是GameComponent
s。要获取Update
和/或被Draw
调用,您必须调用Components.Add(...)
; 单独地,要获取可作为服务检索的对象,您必须打电话Services.AddService(...)
)。
然后,当您想在其他游戏组件(或您已将引用传递给游戏对象的任何类)中使用InputManager
or服务时,您可以这样做: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));
}
然后获取输入服务的行变为:
InputManager input = Game.GetService<InputManager>();