[英]XNA Adding a Texture2D to Main Constructor
我有一个名为Ball的类(用于pong项目),因此需要通过Main Constructor传递Texture2D:
Ball.cs
public class Ball
{
Texture2D _ballSprite;
private float _ballSpeed;
private Vector2 _ballMovement;
private Vector2 _ballPosition;
private const int WINDOW_WIDTH = 800;
private const int WINDOW_HEIGHT = 600;
public Ball(Texture2D sprite)
{
_ballSprite = sprite;
}
然后在Main Game1.cs中
Ball ball = new Ball();
我应该通过Main中的哪些参数来显示Texture2D?
您不应在构造函数中传递Texture2D
。 如果重置图形设备,则在运行游戏时可以丢弃诸如Texture2D
类的图形资源。 每次发生时,您将需要所有Texture2D
对象的新实例。
因此,在XNA中,图形资源的所有内容加载都应在LoadContent()
方法内完成。 您的Game
类将覆盖LoadContent()
方法。 在那里,您可以像这样加载纹理: byBall.BallSprite = Content.Load<Texture2D>("balltexture");
(在这种情况下,您需要公开BallSprite
属性)
或者您可以创建一种在Ball类内部加载的方法
public void LoadContent(Content content)
{
_ballSprite = content.Load<Texture2D>("balltexture");
}
然后从重写的Game
类LoadContent()
方法中调用myBall.LoadContent(Content)
。
请注意, Content
对象是ContentManager
并且如果您多次加载相同的纹理,则只会将该纹理加载到内存中一次(调用第一次加载)。 对于所有后续调用,将返回相同的Texture2D
实例。
XNA在首次更新之前和每次重置图形设备之前都会调用Game.LoadContent()
方法(这可能会由于多种原因而随时发生)。 因此,您需要小心在LoadContent()
方法中进行的操作。 例如,如果您尝试在LoadContent()
创建Ball
类实例,则在游戏_ballSpeed
随时可以用新的Ball实例替换该Ball实例,并且_ballSpeed
, _ballMovement
, _ballPosition
值将丢失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.