2014-09-01 47 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