玩家在游戏屏幕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,否则状态会发生变化。

正如我所说,这在以前是完美的,所以我认为这与玩家等级有关,或者我做错了什么。

如果你需要更多信息,请随时询问,任何想法/解决方案等,请告诉我:)。

非常感谢你提前提供的帮助。

玩家在游戏屏幕XNA前的倒计时期间未被抽中

在桨板的Update函数中,初始化pRectangle成员(用于绘图)。如果此成员没有在另一个位置初始化(到起始位置),则可能在倒计时期间绘制了一个零大小的矩形,因此它不会出现。

您不只是得到一个异常的原因是Rectangle是一个结构,因此除非您将其声明为Rectangle?,否则不能为null。相反,它的成员被初始化为默认值(0表示数字类型)。

调试时的一般建议:

  1. 检查以确保有问题的代码实际上是被调用的。设置断点并确保它被命中
  2. 如果是,请检查断点处的数据是否正确。未初始化的值类型确实会让你很头疼,所以如果你得到了一堆默认值,请检查这些类型