我正在做一个游戏,我制作了所有的构建块。现在我正在研究游戏逻辑和渲染。 我有抽象的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类构造函数和我用来绘制Monster的Draw方法:
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类及其属性 公共抽象类怪物 { 保护点位置; 公共点位置{get {return position; } set {position = value; }}
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);
}
}
答案 0 :(得分:2)
您将输入值设置为当前大小,而不是将当前大小设置为传入值,方法如下:
public Size Size { get { return size; } set { value = size; } }
应该是
public Size Size { get { return size; } set { size = value; } }
Position
的代码看起来还不错:
public Point Position { get { return position; } set { position = value; } }