在两个类之间交换变量

时间:2013-01-09 02:39:25

标签: c# polymorphism subclass superclass inheritance

每当我调用方法Draw in Sprite时,它都不会绘制它,因为X,Y,Width和Height为0. :(

代码:

class Sprite   
{
    protected int Y;// { get; set; }
    protected int X;// { get; set; } { get; set; }
    protected int Width;// { get; set; } { get; set; }
    public int Height;// { get; set; } { get; set; }
    protected Image image;// { get; set; } { get; set; }

    public Sprite()
    {

    }

    public void Draw(Graphics drawArea)
    {
        Image sImage = Image.FromFile("alien.jpg");
        drawArea.Clear(Color.White);
        drawArea.DrawImage(sImage, X, Y, Width, Height);
    }
}

class User:Sprite
{
    public User()
    {

    }

    public User(int width, int height, int userWidth, int userHeight)
    {
        Sprite sprite = new Sprite();
        Image UserImage = Image.FromFile("alien.jpg");

        X = width;
        Y = height;
        Width = userWidth;  
        Height = userHeight;
        image = UserImage;
    }
}

ps:sprite.Draw在另一个类的另一个方法中声明,但是所有这些都应该可以正常工作。 感谢您的帮助,也许可以节省我几个小时的时间:)

尼克

修改

这是给出参数和其他东西的子类。

  Alien mAlien;
User mUser;
protected int mLevel;


public gameLogic()
{


}


public gameLogic(int width, int height, int level)
{
  mUser = new User(width / 2, height - 30, 30, 30);
  mAlien = new Alien(width / 2, 5, 30, 30, "alien.jpg", 10 * level);
  mLevel = level;
}

public void drawAll(Graphics drawArea)
{
  Sprite sprite = new Sprite();
  sprite.Draw(drawArea);
}

我很抱歉所有这些可能会发生的错误,我是新生:)

2 个答案:

答案 0 :(得分:2)

试试这个:

public User(int width, int height, int userWidth, int userHeight)
{
    Sprite sprite = new Sprite();
    Image UserImage = Image.FromFile("alien.jpg");

    sprite.X = width;
    sprite.Y = height;
    sprite.Width = userWidth;  
    sprite.Height = userHeight;
    sprite.image = UserImage;
}

为了访问精灵的字段,您必须指定要修改的Sprite对象。这是通过写入变量的名称,后跟.

来完成的

编辑:刚刚意识到还有另一个问题 - 您的User类继承自Sprite类。根据评论,显然您的用户 精灵,因此您不希望实例化Sprite,而只需使用User类:

class User:Sprite
{
    public User(int width, int height, int userWidth, int userHeight)
    {
        Image UserImage = Image.FromFile("alien.jpg");

        X = width;
        Y = height;
        Width = userWidth;  
        Height = userHeight;
        image = UserImage;
    }
}

然后,不要在另一个文件中调用sprite,而是使用以下内容:

User user = new User(x, y, width, height)

...

user.draw();

此处的关键是确保您使用new User...而不是new Sprite - 即使您要分配Sprite变量,例如Sprite s = new User(...);

然后确保在同一个对象 - user.draw行上调用draw。如果您想检查自己是否正确,请尝试制作Sprite abstract - abstract class Sprite - 如果您尝试实例化Sprite,则会出现编译错误User

编辑2:好的,您真正需要做的就是更改您的呼叫代码:

public void drawAll(Graphics drawArea)
{
    mUser.draw(drawArea);
    mAlien.draw(drawArea);
}

答案 1 :(得分:-1)

您的类,Sprite和User都缺少尾随'}'。其次,您应该在User的构造函数中调用base-Constructor:

public User(int width, int height, int userWidth, int userHeight)
     : base(width, height, userWidth, userHeight, Image.FromFile("alien.jpg"))
{
}

您还需要为基类创建一个接受这些参数的构造函数。