1

每当我在 Sprite 中调用 Draw 方法时,它都不会绘制它,因为 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);
}

对于可能发生的所有这些错误,我深表歉意,我是一名新学生 :)

4

2 回答 2

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。根据评论,显然您的用户精灵,因此您永远不想实例化 a 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 上调用 draw,而是使用以下命令:

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

...

user.draw();

这里的关键是确保你正在使用new User...而不是new Sprite- 即使你正在分配一个Sprite变量,例如Sprite s = new User(...);

然后确保你在同一个对象上调用 draw -user.draw线。如果你想检查你是否做对了,试着做Sprite abstract- abstract class Sprite- 如果你尝试实例化Sprite而不是User.

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

public void drawAll(Graphics drawArea)
{
    mUser.draw(drawArea);
    mAlien.draw(drawArea);
}
于 2013-01-09T02:44:45.300 回答
-1

您的类、Sprite 和用户都缺少尾随“}”。其次,您应该在用户的构造函数中调用基本构造函数:

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

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

于 2013-01-09T02:46:14.687 回答