【发布时间】:2014-09-01 16:47:41
【问题描述】:
我正在开发一款游戏,我制作了所有的积木。现在我正在研究游戏逻辑和渲染。 我有一个抽象的 Monster 类和一个继承自它的名为 GreenMonster 的类。
现在奇怪的是,当我尝试初始化一个 GreenMonster 对象时。
当我这样做时:
private void initGreenMonsters()
{
for (int i = 0; i < greenMonsters.Length; i++)
{
greenMonsters[i] = new GreenMonster(new Point(0,40),new Size(40, 40));
}
}
一切都按照我的计划进行,我可以在表单上渲染图像。
但是当我尝试这样初始化时:
private void initGreenMonsters()
{
for (int i = 0; i < greenMonsters.Length; i++)
{
greenMonsters[i] = new GreenMonster();
greenMonsters[i].Position = new Point(0, 40);
greenMonsters[i].Size = new Size(40, 40);
}
}
我没有收到任何错误,应用程序运行,但我可以渲染怪物。
这是我用来绘制怪物的Monster类构造函数和Draw Method:
public Monster(Point _startPosition,Size _size)
{
this.size = _size;
this.position = _startPosition;
}
public virtual void Draw(Graphics g)
{
Rectangle monsterRec = new Rectangle(position, size);
g.DrawImage(img, monsterRec);
}
这是 GreenMonster 类的构造函数:
public GreenMonster(Point _startPosition, Size _size)
: base(_startPosition, _size)
{
this.img = new Bitmap(SpaceInvadersGame.Properties.Resources.NormalMonster);
this.hp = 1;
this.speed = 1;
}
public GreenMonster()
{
this.img = new Bitmap(SpaceInvadersGame.Properties.Resources.NormalMonster);
this.hp = 1;
this.speed = 1;
}
唯一困扰我的是,当我同时查看初始化对象的两种方式时,它看起来都一样.. 我只是找不到两种方式之间的任何不同。 有人知道它有什么不同吗?
如果您需要更多代码以便问题更清楚,我很乐意添加!
这是 Monster 类及其属性 公共抽象类 Monster { 保护点位置; 公共点位置 { 获取 { 返回位置; } 设置 { 位置 = 值; } }
protected Size size;
public Size Size { get { return size; } set { value = size; } }
public int speed;
protected Bitmap img;
protected int hp;
public int HP { get { return hp; } }
public void SetStartingPosition(int x, int y)
{
this.position = new Point(x, y);
}
public virtual void Draw(Graphics g)
{
Rectangle monsterRec = new Rectangle(position, size);
g.DrawImage(img, monsterRec);
}
}
【问题讨论】:
-
GreenMonster 必须有第二个构造函数,否则您的代码将无法编译。可以发一下吗?
-
是的,我现在就添加它!
-
那么 Position 和 Size 属性是什么?也许将您的代码发布为MCVE 会有所帮助。
-
当大小为零或未定义时,基本构造函数
Monster()做了什么?也许它做了一些不幸的事情,Sizesetter 没有修复。 -
您需要按照@nvoigt 的说明发布所有代码。似乎属性设置器存在问题。构造函数没问题。
标签: c# inheritance initialization