我不明白我的Pong XNA/ c#代码出了什么问题

本文关键字:代码 什么 问题 明白 我的 Pong XNA | 更新日期: 2023-09-27 18:02:23

我遵循了这个教程-

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

显示"没有找到图形组件"

我注释掉这段代码-

        ////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");

它可以工作,但是在第一个屏幕之后,它不会继续到下一个屏幕

我被难住了

我不明白我的Pong XNA/ c#代码出了什么问题

看一下ContentManager的构造函数。它接受一个IServiceProvider参数

内容管理器通过服务提供商获取IGraphicsDeviceService。该服务只是提供一个GraphicsDevice对象。内容管理器需要一个图形设备,以便将纹理加载到该设备上。

默认情况下,当你在你的游戏类(衍生自Game)的构造函数中创建GraphicsDeviceManager(这是一个IGraphicsDeviceService)时,它将注册Game.Services(这是一个ISeviceProvider)。

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

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

原因是Game类的严重滥用。你应该只有一个。您的Screen类继承自Game,因此您有几个!别这样!