我不明白我的Pong XNA / C#代码有什么问题

时间:2011-07-18 22:49:55

标签: c# xna

我遵循了本教程 -

我使用第三种方法(多态)为我的游戏添加屏幕,现在我收到了错误。

它说'未找到图形组件'

我注释掉了这段代码 -

        ////Vector2 ballPosition = new Vector2(GraphicsDevice.Viewport.TitleSafeArea.X + GraphicsDevice.Viewport.TitleSafeArea.Width / 2,
        ////    GraphicsDevice.Viewport.TitleSafeArea.Y + GraphicsDevice.Viewport.TitleSafeArea.Height / 2);
        //ball.Initialize(Content.Load<Texture2D>("pongball2"), ballPosition);


        ////Vector2 paddle1Position = new Vector2(GraphicsDevice.Viewport.TitleSafeArea.X + GraphicsDevice.Viewport.TitleSafeArea.Width / 100 * 5,
        ////    GraphicsDevice.Viewport.TitleSafeArea.Y + GraphicsDevice.Viewport.TitleSafeArea.Height / 2);
        //paddle1.Initialize(Content.Load<Texture2D>("pongpaddle1"), paddle1Position);

        ////Vector2 paddle2Position = new Vector2(GraphicsDevice.Viewport.TitleSafeArea.X + GraphicsDevice.Viewport.TitleSafeArea.Width / 100 * 99,
        ////    GraphicsDevice.Viewport.TitleSafeArea.Y + GraphicsDevice.Viewport.TitleSafeArea.Height / 2);
        //paddle2.Initialize(Content.Load<Texture2D>("pongpaddle2"), paddle2Position);


        //Score = Content.Load<SpriteFont>("score");

它可以工作,但是在第一个屏幕之后,它将无法进入下一个屏幕。

是的,我被困在这里。

1 个答案:

答案 0 :(得分:2)

看看the constructor for ContentManager。它需要一个IServiceProvider参数。

内容管理员使用服务提供商获取IGraphicsDeviceService。此服务只提供GraphicsDevice对象。内容管理器需要一个图形设备才能将纹理加载到所述设备上。

默认情况下GraphicsDeviceManagerIGraphicsDeviceService)会在的构造函数中创建Game.ServicesISeviceProvider)时自行注册你的游戏类(源自Game)。

ContentManager提供的Game.Content使用同一个(Game.Services)服务提供商。因此,当LoadContent被调用时,它可以向服务提供商查询图形设备服务,从中可以获取其图形设备。

您获得的异常是因为您使用的ContentManager无法获得图形设备(或可能是有效的图形设备)。

原因是Game类的严重误用。你应该只有一个。您的Screen课程继承自Game,因此您有几个课程!不要那样做!