基类
注意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);
}
}
在我介绍这个继承业务之前,该块是可见的。
答案 0 :(得分:2)
当你调用draw时,它使用基类defaultObject
中的metheod,这很好但是该方法需要从未设置过的矩形和原始信息。
您需要在base.Update()
的末尾调用block.Update()
或将矩形/原点设置移动到构造函数。
答案 1 :(得分:1)
尝试致电
base.Update()
由于未设置“矩形”和“原点”
,也许对象被淹没在屏幕外