在XNA中,为不是GameService
的对象创建GameComponent
是否可以接受?我知道GameService
旨在成为访问GameComponent
的一种方式,但如果您尝试提供访问权限的对象不需要在每个更新周期更新,该怎么办?例如,我有一个Camera2D
对象,可以为Matrix
计算SpriteBatch.Begin()
。相机不需要自动更新,因为它的位置,旋转等都会被游戏代码更新。
创建GameService
所需的只是一个类型和一个提供者对象,因此提供者对象不必扩展GameComponent
,但这是一种可接受的做法吗?还有更好的方法吗?
答案 0 :(得分:1)
服务不一定也是GameComponent。只需查看GraphicsDeviceManager,它就会提供IGraphicsDeviceService而不是GameComponent。游戏服务容器只是松散耦合对象的一种方式。
创建一个接口ICamera2D,让你的Camera2D类实现它,然后在Game.Services中注册一个Camera2D实例作为ICamera2D的服务提供者。然后,您可以使用该接口与其他类中的Camera2D实例进行通信。这意味着如果在某些时候你必须更改为OtherCamera2D,你只需要在服务容器中注册它而不是Camera2D的实例,而不必修改你的其他类。