基本上我在我的游戏中实施了继承之前,引入了2个新类,玩家和敌人(不使用敌人的atm),在倒计时屏幕(水平倒计时)之前加载并绘制了水平(包括玩家桨)开始)。
现在,当我在游戏中实现了继承性时,所有级别都被从玩家桨中拉开,继承自名为Paddle的类,其中Player和Enemy类是派生类。我已经尝试在播放器类中从基类/ paddle类重写draw方法,然后在基类中使用draw方法。
也许这与绘制方法无关,但我所知道的是,在倒计时画面期间玩家不会被绘制,但当倒计时屏幕完成时,玩家将被抽出。这似乎是一个小问题或变化,但它真的很令人沮丧,因为我无法解决造成这种情况的原因。
相关代码如下:
来自播放器类的代码
//constructor
public Player(PlayerIndex newID, Texture2D newTexture, Vector2 newPosition, Viewport theViewport, Color newColour)
: base(newTexture, newPosition, theViewport, newColour)
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
spriteBatch.Draw(pTexture, pPosition, pRectangle, pColour);
//base.Draw(gameTime, spriteBatch);
}
来自划桨类的代码
//constructor
public Paddle(Texture2D newTexture, Vector2 newPosition, Viewport theViewport, Color newColour)
{
pTexture = newTexture;
pPosition = newPosition;
//theres more code here but it's assigning parameter values to properties in this class
}
public virtual void Update(GameTime gameTime)
{
pRectangle = new Rectangle((int)pPosition.X, (int)pPosition.Y, pWidth, pHeight);
}
public virtual void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
spriteBatch.Draw(pTexture, pPosition, pRectangle, pColour);
}
来自game1类的代码
public void DrawPreGameCountdownScreen(GameTime gameTime)
{
DrawPlayingGameScreen(gameTime);
//more code here but it's irrelevent....
}
public void DrawPlayingGameScreen(GameTime gameTime)
{
DrawBlocks(gameTime);
player1.Draw(gameTime, spriteBatch);
//more code here... but irrelevent to this...
}
播放器1显然是播放器,它的类型是播放器,而不是Paddle(因为我已经将Paddle类抽象化了......因为我不想直接创建Paddle对象)
我已将Paddle类中的所有属性也保护为。
我也在使用游戏状态来区分游戏中的不同点,因此在倒计时屏幕的更新方法中,它基本上会减少计时器的值,然后在此之前检查计时器不是0,否则国家改变了。
正如我所说,这之前完美无缺,所以我认为它与玩家类有关,或者我做错了。
如果您需要更多信息,请随时询问和任何想法/解决方案等,请告诉我:)。
非常感谢您提供的帮助。
答案 0 :(得分:1)
在paddle的Update
函数中初始化pRectangle成员(在绘图中使用)。如果此成员未在其他位置初始化(到起始位置),则可能在倒计时期间绘制零大小的矩形,因此不会出现。
您不仅仅获得异常的原因是Rectangle
是一个结构,因此除非您将其声明为Rectangle?
,否则不能为空。而是将其成员初始化为默认值(数字类型为0)。
调试时的一般建议: