私は、同じイメージのインスタンスがさまざまな場所にあるゲームを作ろうとしています。イメージを一度宣言してから、そのビットマップをonDraw()で使用したいと考えていました。しかし、クラスで宣言されている変数を使用すると、その値を保持しているメモがあるのでエラーが発生します。 私はちょうどsurfaceviewを使用するように移動したので、多分私はそれで何かを見逃しています。私は現在、1つのイメージを描画しようとしていますが、アイデアは同じで、複数のインスタンスに到達すると使用されます。面白いonDrawの同じ画像の複数のインスタンスを効率的に描画します
class GameView extends SurfaceView implements SurfaceHolder.Callback
{
private GameThread _thread;
// vars for display, scale, etc
private int displayWidth;
private int displayHeight;
private double scale;
private Bitmap groundPic;
public GameView(Context context) {
super(context);
// set the surface holder for callback
getHolder().addCallback(this);
_thread = new GameThread(getHolder(), this);
displayWidth = getWidth();
displayHeight = getHeight();
scale = displayWidth/512.0; // ground image is 512;
}
@Override
public void onDraw(Canvas canvas)
{
groundPic = BitmapFactory.decodeResource(getResources(), R.drawable.ground);
groundPic = Bitmap.createScaledBitmap(groundPic, displayWidth, 50, true);
canvas.drawColor(getResources().getColor(R.color.background_colour));
// draw ground
canvas.drawBitmap(groundPic,0, getHeight() - 50, null);
}
displayWidthはコンストラクタで値を設定することで、私が間違って0アムであるので、これは近い力が発生します。私は今持っている何 ?私はビューを作成した後でsetContentView()を呼び出す前に、自分のアクティビティから呼び出すinit()を作成しようとしました。 すべての設定をonDraw()内に置くとうまくいくことが分かりますが、実際には効率が悪いと感じました。 私は(エラーを引き起こした)期待していたのは、init()とその内部に、クラス変数となるgroundPicを設定してから、onDrawを小さくして速くすることでした。この同じビットマップオブジェクトは、すべてのサイクルで使用されます。私は地上でも30個のミサイルを作っていくつもりだから、1回だけ作って30回の特定の場所で作ってみると、毎回同じビットマップを30回作ってしまうと大変だ。 誰かが正しい方向に私を指し示して、これが適切に働くことができれば、それは大いに感謝されます。
ありがとうございました!私はHandlersとRunnablesを試してみることにしました。これまでのところうまくいきましたが、次の試合では必ずSurfaceViewを試してみましょう。 偉大な指針、私は本当にそれを感謝します。 –