-1

onTouchEvent を作成して、キャラクターのスプライトから前方に発射するミサイルを作成しようとしています。私はこれを使用して作業しています

        if (missdraw = true){
            canvas.drawBitmap(missile,missilex,missileY,null);
            missilex = missilex + 14;
            missdraw = false;
        }

私のonDrawメソッドでは、問題は一度に1つしか作成されないことです. これに対処するクラスを作成しようとしましたが、起動しようとするとエラーとクラッシュが発生するだけです。これが私がクラスに使用するものです:(これは私のゲームビューのondrawにあります)

        for (Batcher missile : missiles ){
            missile.onDraw(canvas);
        }

これはクラスにあります

public Batcher(List<Batcher> temps, ScreenActivity newView, float x,
        float y, Bitmap missile){

    this.x = 1;
    this.y = 2;
    this.missile = missile;

}

public void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    canvas.drawBitmap(missile, x,y, null);

}

助けていただければ幸いですが、プログラミングにまったく慣れていないので、コードだけでなく、それがどのように機能するかを説明していただければ、人々のコードをコピーするだけでなく、何をしているのか、なぜそれをしているのかを本当に理解する必要があります。できます。

乾杯フィル。

4

1 に答える 1

1

実際、あなたのコンセプトはかなり良いです。あなたが投稿したコードサンプルについて私がよく理解していないことがいくつかあります。私がやろうとしていることに翻訳しようとします。私が間違っているかどうか教えてください:)

あなたのゲームクラスでは、ミサイルのリストが必要です(そしてあなたが持っているように見えます):

LinkedList<Batcher> missiles;

あなたのonTouch()中で、しかしミサイルが作成されます-

missiles.add(new Batcher(missilex, missiley, missile));

これでミサイルのコレクションができました。オブジェクトがコレクションの一部であることを知る必要がないため、バッチャーのコンストラクターにリストを含めなかったことに注意してください。知っておく必要があるのは、自分自身を描く方法と場所だけです。すべてのミサイルが画面に頻繁に追加または画面から削除されると想定しているため、一度に画面に表示されるミサイルはわずかですが、LinkedListを使用しました。これは、追加と削除には高速ですが、アクセスには低速です。特定のミサイル。コレクション内の特定のアイテムにアクセスする必要があり、コレクションがあまり変更されていない場合は、代わりにArrayListを使用します。onDrawに進みます-ミサイルがそれ自体を描画しますが、これは問題ありませんが、ミサイルが描画する場所を指示して、ビューに描画を行わせることを好みます-

for (Batcher missile : missiles ){
  missile.setX(missile.getX() + 14); // to make it move
  if (missile.getX() > canvas.gedWidth()) { //check if it's left the screen
    missiles.remove(missile); // Remove it
  }
  else { //perform drawing
    canvas.drawBitmap(missile.getBitmap(), missile.getX(), missile.getY(), null);
  }
}

うまくいけばそれでいいのですが、もっと説明してほしいことがあれば、遠慮なく知らせてください!

于 2012-04-07T16:11:35.067 に答える