我遵循了本教程 -
我使用第三种方法(多态)为我的游戏添加屏幕,现在我收到了错误。
它说'未找到图形组件'
我注释掉了这段代码 -
////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");
它可以工作,但是在第一个屏幕之后,它将无法进入下一个屏幕。
是的,我被困在这里。答案 0 :(得分:2)
看看the constructor for ContentManager
。它需要一个IServiceProvider
参数。
内容管理员使用服务提供商获取IGraphicsDeviceService
。此服务只提供GraphicsDevice
对象。内容管理器需要一个图形设备才能将纹理加载到所述设备上。
默认情况下GraphicsDeviceManager
(IGraphicsDeviceService
)会在的构造函数中创建Game.Services
(ISeviceProvider
)时自行注册你的游戏类(源自Game
)。
ContentManager
提供的Game.Content
使用同一个(Game.Services
)服务提供商。因此,当LoadContent
被调用时,它可以向服务提供商查询图形设备服务,从中可以获取其图形设备。
您获得的异常是因为您使用的ContentManager
无法获得图形设备(或可能是有效的图形设备)。
原因是Game
类的严重误用。你应该只有一个。您的Screen
课程继承自Game
,因此您有几个课程!不要那样做!