玩家在游戏屏幕XNA前的倒计时期间未被抽中
本文关键字:倒计时 游戏 屏幕 XNA 玩家 | 更新日期: 2023-09-27 17:58:37
基本上,在我在游戏中实现继承之前,引入了两个新的职业,玩家和敌人(不使用敌人的atm),在倒计时屏幕(关卡开始前的倒计时)期间加载和绘制关卡(包括玩家桨)。
现在,当我在游戏中实现继承时,所有级别都与玩家球拍分开,继承自一个名为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...
}
player1显然是播放器,它的类型是player,而不是Paddle(因为我已经将Paddle类抽象了……因为我不想直接创建Paddle对象)。
我已经将Paddle类中的所有属性也设置为受保护属性。
我还使用游戏状态来区分游戏中的不同点,因此在倒计时屏幕的更新方法中,它基本上会降低计时器的值,在此之前,检查计时器是否不在0,否则状态会发生变化。
正如我所说,这在以前是完美的,所以我认为这与玩家等级有关,或者我做错了什么。
如果你需要更多信息,请随时询问,任何想法/解决方案等,请告诉我:)。
非常感谢你提前提供的帮助。
在桨板的Update
函数中,初始化pRectangle成员(用于绘图)。如果此成员没有在另一个位置初始化(到起始位置),则可能在倒计时期间绘制了一个零大小的矩形,因此它不会出现。
您不只是得到一个异常的原因是Rectangle
是一个结构,因此除非您将其声明为Rectangle?
,否则不能为null。相反,它的成员被初始化为默认值(0表示数字类型)。
调试时的一般建议:
- 检查以确保有问题的代码实际上是被调用的。设置断点并确保它被命中
- 如果是,请检查断点处的数据是否正确。未初始化的值类型确实会让你很头疼,所以如果你得到了一堆默认值,请检查这些类型