1

メソッド Draw in Sprite を呼び出すたびに、X、Y、幅、高さが 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;
    }
}

次に、他のファイルのスプライトで draw を呼び出す代わりに、次を使用します。

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

...

user.draw();

ここで重要なのは、変数に代入している場合でも、を使用new User...しているかどうかを確認することです。new SpriteSpriteSprite s = new User(...);

次に、同じオブジェクトであるuser.draw線に対して draw を呼び出すようにしてください。あなたがそれを正しく行っていることを確認したい場合は、作成してみSprite abstractabstract class Spriteください。SpriteUser

編集 2: OK、本当に必要なのは呼び出しコードを変更することだけです:

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

Sprite と User の両方のクラスに末尾の '}' がありません。次に、ユーザーのコンストラクターで base-Constructor を呼び出す必要があります。

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 に答える