XNA C#Inheritance阻止对象被绘制

时间:2014-02-20 12:46:16

标签: c# inheritance xna

基类

注意draw方法。它存在且语法合理。

public class defaultObject
{
    // variables are here

    public defaultObject(Vector2 nPos, float nRotation, Texture2D nTexture, int nWidth, int nHeight)
    {
        // constructor business
    }

    public virtual void update()
    {
        rectangle = new Rectangle((int)position.X, (int)position.Y, width, height);
        origin = new Vector2(texture.Width / 2f, texture.Height / 2f);
    }

    public virtual void draw(SpriteBatch spatch)
    {
        spatch.Draw(texture, rectangle, null, Color.Green, rotation, origin, SpriteEffects.None, 1f);
    }
}

派生类

无需覆盖draw方法,只需更新方法。

public class block: defaultObject
{
    public block(Vector2 nPos, float nRotation, Texture2D nTexture, int nWidth, int nHeight)
        : base(nPos, nRotation, nTexture, nWidth, nHeight)
    { }

    public override void update()
    {
        if (rotation > (float)(Math.PI * 2))
        {
            rotation = 0;
        }

        if (rotation < 0)
        {
            rotation = (float)Math.PI * 2;
        }
    }
}

Game1.cs

假设所有其他XNA必需品都存在,我保持简单阅读

问题:当我尝试绘制块a时,它不会出现。为什么呢?

public class Game1 : Microsoft.Xna.Framework.Game
{
    block a;

        a = new block(new Vector2(windowSize.X / 4f, windowSize.X / 2), 3.1415f, rectangleTexture, 300, 50);
    }

    protected override void Update(GameTime gameTime)
    {
        //keyboard input to manipulate a is here

        a.update();
    }

    protected override void Draw(GameTime gameTime)
    {
        a.draw(spriteBatch);
    }
}

在我介绍这个继承业务之前,该块是可见的。

2 个答案:

答案 0 :(得分:2)

当你调用draw时,它使用基类defaultObject中的metheod,这很好但是该方法需要从未设置过的矩形和原始信息。

您需要在base.Update()的末尾调用block.Update()或将矩形/原点设置移动到构造函数。

答案 1 :(得分:1)

尝试致电

base.Update()

由于未设置“矩形”和“原点”

,也许对象被淹没在屏幕外