每当我调用方法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);
}
我很抱歉所有这些可能会发生的错误,我是新生:)
答案 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"))
{
}
您还需要为基类创建一个接受这些参数的构造函数。