启动课程时的奇怪行为

时间:2014-09-01 16:47:42

标签: c# inheritance initialization

我正在做一个游戏,我制作了所有的构建块。现在我正在研究游戏逻辑和渲染。 我有抽象的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);
    }

}

1 个答案:

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