2014-02-20 72 views
0

基類XNA C#繼承被吸入

通知拉伸方法停止對象。它存在且語法合理。

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必需品都在那裏,我簡單說明閱讀

問題:當我嘗試畫塊,它不會出現。爲什麼?

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); 
    } 
} 

在我介紹這個繼承業務之前,該塊是可見的。

+0

爲什麼defaultObject.draw()設置爲虛擬? – Scherling

+0

我可能需要進一步將其更改爲開發。 – ShadowByte

回答

2

當你調用繪製到屏幕之外,它採用了metheod從基類defaultObject,這很好,但該方法需要從未設置的矩形和原始信息。

您需要在block.Update()的末尾調用base.Update()或將矩形/原點設置移至構造函數。

+0

智能感知不會在a.Update()後面提示'base.Update()'。 – ShadowByte

+0

不,它應該在'a.Update()'裏面,但是在代碼塊的末尾。就像標準的Game1.Update在開始一個新項目時所做的一樣。你想要同樣的功能 –

+0

啊,我誤解了你的文字。 「block.Update()」被解釋爲'block.Update()。base.Update()',看起來很奇怪,但我明白你的意思是在_the base method_的末尾。謝謝。 – ShadowByte

1

嘗試調用

base.Update() 

也許對象被淹沒,因爲未設置「矩形」和「原產地」

+0

謝謝!我在被覆蓋的方法內調用了base.Update(),它現在可以工作。 – ShadowByte