0

私はアンドロイドでゲーム開発に取り組んでいます

モデル パッケージに droid というクラスがあり、メインのゲーム パネル クラスに update() というコンストラクターがあります。

ドロイドの配列を作成し、メイン ゲーム パネルでそれらにアクセスし、メイン ゲーム パネル クラス内のコンストラクターからアクセスしたいと考えています。これはメイン ゲーム パネル コンストラクターから実行できますが、更新コンストラクターからは実行できません。つまり、メイン ゲーム パネル クラスの更新コンストラクターでドロイドの 1 つの x 位置にアクセスしようとすると、常に次のエラーが表示されます。

package net.test.droid.model;

public class Droid {

private Bitmap bitmap;  // the actual bitmap
private int x;          // the X coordinate
private int y;  
private boolean touched;    // if droid is touched/picked up

public Droid(Bitmap bitmap, int x, int y) {
    this.bitmap = bitmap;
    this.x = x;
    this.y = y;
}



public Bitmap getBitmap() {
    return bitmap;
}
public void setBitmap(Bitmap bitmap) {
    this.bitmap = bitmap;
}
public int getX() {
    return x;
}
public void setX(int x) {
    this.x = x;
}
public int getY() {
    return y;
}
public void setY(int y) {
    this.y = y;
}



public void draw(Canvas canvas) {
        canvas.drawBitmap(bitmap, x, y, null);
}
}

メインゲームで

public class MainGamePanel extends SurfaceView implements
    SurfaceHolder.Callback {

  public Droid droid_array;
  public MainGamePanel(Context context) {
    super(context);
    // adding the callback (this) to the surface holder to intercept events
    getHolder().addCallback(this);
    Droid[] droid_array = new Droid[5];
    for (int i = 0; i < 5; i++) {
        droid_array[i] = new Droid(BitmapFactory.decodeResource(
                getResources(), R.drawable.ic_launcher),                              droid_x_pos + i*10, droid_y_pos);
    }
droid_array[1].setX(666);
}

最後の行は正常に動作しますが、 update() で使用しようとするとエラーが発生します

public void update() {
test=droid_array[1].getX();
}

上記の行は、「式の型は配列型でなければなりませんが、Droid に解決されました」というエラーを返します。

4

2 に答える 2

2

これがあなたの問題です:

public Droid droid_array;

タイプがありDroidます。これはクラス レベルのプロパティです。コンストラクター内で、MainGamePanelこの変数を使用してクラス レベルのプロパティを非表示にします。

Droid[] droid_array

MainGamePanelコンストラクターを離れると、Droid[] droid_array変数はスコープ外になります。

Update メソッドpublic Droid droid_arrayは、配列ではないクラス プロパティを参照します。

于 2013-09-09T17:43:09.273 に答える
0

基本的に、 という名前の 2 つの変数がありますdroid_array

  1. public Droid droid_array; //this is of type Droid
  2. Droid[] droid_array = new Droid[5]; //this is an array of Droid type

MainGamePanel(Context contect)コンストラクターの最後の行では、 はメソッド スコープであるdroid_arrayため、配列としてアクセスできます。droid_array

しかし、update()メソッドには、 のような配列はありませんdroid_array。これにより、Droid droid_array配列ではなくDroid型のオブジェクトである が利用可能になります。

このようなことをする必要があります。

public class MainGamePanel extends SurfaceView implements
    SurfaceHolder.Callback {

  public Droid[] droid_array;
  public MainGamePanel(Context context) {
    super(context);
    // adding the callback (this) to the surface holder to intercept events
    getHolder().addCallback(this);

    droid_array = new Droid[5];
    for (int i = 0; i < 5; i++) {
        droid_array[i] = new Droid(BitmapFactory.decodeResource(
                getResources(), R.drawable.ic_launcher),                               droid_x_pos + i*10, droid_y_pos);
    }
    droid_array[1].setX(666);
  }

  public void update() {
      test=droid_array[1].getX();
  }
}
于 2013-09-09T17:47:06.000 に答える