2014-09-01 4 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); 
     } 
    } 

Я не получаю никаких ошибок, и пробеги приложения, но я могу вынести монстр.

Это конструктор монстр класса и метод 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; 
    } 

единственное, что беспокоит меня , что, когда я смотрю на оба пути, я запускаю объекты, это просто выглядит так же. Я просто не могу найти никакого различия между этими двумя способами. Кто-то знает, как он отличается от других?

Если вам нужно больше кода, поэтому вопрос более ясен, я был бы счастлив добавить!

это класс Монстера и его свойства общественный аннотация класс Монстр { { защищенный Пост; 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

+0

Да, я добавлю его прямо сейчас! – samy

+1

Итак, каковы свойства Position и Size? Возможно, поможет ваш код в качестве [MCVE] (http://stackoverflow.com/help/mcve). – nvoigt

ответ

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

Смежные вопросы