没有GameComponent的GameService?

时间:2009-10-06 02:20:14

标签: .net xna

在XNA中,为不是GameService的对象创建GameComponent是否可以接受?我知道GameService旨在成为访问GameComponent的一种方式,但如果您尝试提供访问权限的对象不需要在每个更新周期更新,该怎么办?例如,我有一个Camera2D对象,可以为Matrix计算SpriteBatch.Begin()。相机不需要自动更新,因为它的位置,旋转等都会被游戏代码更新。

创建GameService所需的只是一个类型和一个提供者对象,因此提供者对象不必扩展GameComponent,但这是一种可接受的做法吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

服务不一定也是GameComponent。只需查看GraphicsDeviceManager,它就会提供IGraphicsDeviceService而不是GameComponent。游戏服务容器只是松散耦合对象的一种方式。

创建一个接口ICamera2D,让你的Camera2D类实现它,然后在Game.Services中注册一个Camera2D实例作为ICamera2D的服务提供者。然后,您可以使用该接口与其他类中的Camera2D实例进行通信。这意味着如果在某些时候你必须更改为OtherCamera2D,你只需要在服务容器中注册它而不是Camera2D的实例,而不必修改你的其他类。