2014-09-01 39 views
1

我正在制作一款游戏,并且我制作了所有的积木。现在我正在研究游戏逻辑和渲染。 我有抽象的怪物类和类继承自它的类调用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); 
     } 
    } 

我没有得到任何错误,并且应用程序运行,但我可以使怪物。

这是怪兽类的构造函数,我用它来画一个怪物的绘制方法:

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

,这是绿色怪物类的构造函数:

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

困扰我的唯一的事情就是,当我看着两种方式我初始化的对象,它看起来是一样的.. 我只是无法找到两种方式之间的任何不同。 有人有什么想法如何与众不同?

如果你需要更多的代码,所以问题更加清晰,我会很乐意补充!

这是怪物类及其属性 公共抽象类怪物 保护点位置; public point position {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

GreenMonster必须有第二个构造函数,否则您的代码将无法编译。你可以发布吗? – nvoigt 2014-09-01 16:51:23

+0

是的,我现在将它添加! – samy 2014-09-01 16:53:05

+1

那么位置和大小属性是什么?也许将你的代码发布为[MCVE](http://stackoverflow.com/help/mcve)会有所帮助。 – nvoigt 2014-09-01 16:55:45

回答

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; } } 
+0

ohhhhh我现在看到我的错误。谢谢你的工作 – samy 2014-09-01 17:15:53