小编org*_*nic的帖子

XNA在运行时动态更改游戏服务

我有一个接口(ICamera),由2个类(FreeCamera,StaticCamera)实现.这些类继承自GameComponent.

示例定义:

public class FreeCamera : GameComponent, ICamera
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

现在我将这些类添加到游戏组件中,并将其中一个组件注册到游戏服务中

private FreeCamera freeCam;
private StaticCamera staticCam;

public Game1()
{
  graphics = new GraphicsDeviceManager(this);
  Content.RootDirectory = "Content";
  freeCam = new FreeCamera(this) { Enabled = true };
  staticCam = new StaticCamera(this) { Enabled = false };
  Services.AddService(typeof(ICamera, freeCam);
  Components.Add(freeCam);
  Components.Add(staticCam);
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后我想借助切换功能在应用程序流程中更改服务的提供程序

namespace Game1
{
  protected override void Update(GameTime gameTime)
  {
    var keyboard = Keyboard.GetState();
    if(keyboard.IsKeyDown(Keys.C))
    {
      if(freeCam.Enabled)
      {
        Services.RemoveService(typeof(ICamera));
        Services.AddService(typeof(ICamera, staticCam);
        freeCam.Enabled = !freeCam.Enabled;
        staticCam.Enabled = !staticCam.Enabled;
      } …
Run Code Online (Sandbox Code Playgroud)

c# xna

5
推荐指数
1
解决办法
811
查看次数

标签 统计

c# ×1

xna ×1