2011-03-27 13 views

答えて

1

あなたは質問しています:より良い方法がありますか? 答えは:いいえ。シーン全体、背景、すべて、すべてのフレームを再描画する必要があります。 また、一般的に言えば、onOffsetsChangedを描画したくありません。 runnableで使用している変数を更新するだけです。 SDKのCubeサンプルがどのように機能するかを見てみましょう。ジョーイの例も正しい。これが役に立ちますようにお願いします

+0

私は理解します。どうもありがとうございました!これらの魔女はあなたがonOffsetChangedを呼び出すほうがいいと思いますか? drawFrame();またはmHandler.postDelayed(mDrawWall、30); ??私は本当にフレームレートが気に入らない。 – Misca

+0

@Misca onOffsetsChangedに描画呼び出しを入れる必要はありません(Cubeの例ではdrawFrame()の呼び出しは実際に余計です)。あなたの実行可能ファイルの次の「スケジュールされた」呼び出しは、共有変数で変更した値を使用して「自動的に」開始されます。選択したフレームレートを実行可能モジュールの本体に設定します。そこで、それ以降の呼び出しをスケジュールします。 –

+0

はい、私のスレッドでは10秒のスケジュールを使用します。 onOffsetChangedで30 milisをスケジュールする必要がありますか? – Misca

1

私は通常、オフセットや位置を変更して位置や画像を読んで変更しているような状況に陥っています。私はonOffsetsChangedを使用して、変更されると自動的に描画ルーチンで更新される定数変数に情報を送ります。あなたはそのように仕事をしたいの定数を定義することによって

スタート...私はonOffsetsChangedイベントからすべての値をキャプチャしています。この例では

Private float mXOffset = 0, 
       mYOffset = 0, 
       mXStep = 0, 
       mYStep = 0, 
       mXPixels = 0, 
       mYPixels = 0; 

、あなた必要なだけ定義し、オフセットをキャプチャし、ステップ、またはピクセルを使用します。

public void onOffsetsChanged(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) { 

mXOffset = xOffset; 
mYOffset = yOffset; 
mXStep = xStep; 
mYStep = yStep; 
mXPixels = xPixels; 
mYPixels = yPixels; 

DrawStuff(); 
} 

このデータを取得すると、アプリケーションでもう少しパワーと柔軟性を得ることができます。キャンバスの更新を次のように呼び出すことができます。描画ルーチンが呼び出されるたびにオフセットが変更されると、これらの数値を使用して画像の位置、移動速度、またはその他の数学的計算を変更できます。

private void DrawStuff(){ 
     final SurfaceHolder holder = getSurfaceHolder();             
      Canvas c = null; 
      try { 
        c = holder.lockCanvas(); 
        if (c != null) {         
         c.drawBitmap(this.ImageI, mXPixels,mYPixels + mYOffset,null);                  
         c.drawBitmap(this.ImageII, xPixels, 0, paint); 
           } 
       } finally { 
        if (c != null) holder.unlockCanvasAndPost(c); 
       } 

    } 

···など。これが私が完全にはっきりしていないことをあなたが求めていたものだと願っています。これにより、必要に応じて、これらのオフセット、ステップ、および場所を他の場所で使用することもできます。

+0

ビットマップを再読み込みして再描画することなく、画像を画面上で変換するより良い方法はありませんか?私のスレッドは毎分実行されており、ドローではたくさんのことがあります。ありがとうございました:) – Misca

+0

は、実際にビットマップにロードしていないと指定したコードに、あなたがロードしたビットマップを参照しているだけです。 c.drawBitmapを使うと、上記のビットマップをキャンバスに適用するだけです。だから、正確に何を達成しようとしているかによっては、プロセッサーについてあまり心配することなくこれらのイメージを簡単に操作できるはずです。しばしばあなたが作業するビットマップを処理するための小さな配列を別のイメージを呼び出している場合。 – Joey

関連する問題