Loading...

android-group-japan@googlegroups.com

[Prev] Thread [Next]  |  [Prev] Date [Next]

[android-group-japan: 1864 ] Re: 【アドバイスください】canva sについて micco Sun Oct 04 07:01:04 2009

アドバイス頂いた皆様へ

お世話になります。
miccoです。

試験した結果、全ピクセルを再描画していないことが原因のようでした。
画面の一部描画を行っていたロジックを見直し、毎回Canvas全体を書き換
える形にソースを修正したところ、問題が解決しました。

ありがとうござました!
Dirty rectangleを使う方法は別途研究してみたいと思います(汗)。

大野さんのコメントにありましたが、内部的なダブルバッファリング処理では、
lockでBACKのCanvasが取得され、postでFRONTとBACKのCanvasの入
れ替えが行われているのかもしれません。
開発者向けの説明を読んでもそこまで書いてないようなので、その真偽の程
は分かりませんが、起こっていた現象を考えると、そういうことなんでしょうね。

皆様から、他にも色々なアドバイスを頂きまして、ありがとうございました!
スレッド破棄の方法や排他処理もソースに反映させて頂きました。
大変勉強になりました。

情報不足でご迷惑をおかけしましたが、バグを解消することができ、大変感謝
しております。こういうコミュニティは本当に有り難いですね〜。

またお聞きする可能性が高いですが(笑)、今後とも宜しくお願いいたします。

On 10月3日, 午前12:36, micco <[EMAIL PROTECTED]> wrote:
> 大野さん
>
> ありがとうございます。
> miccoです。
>
> 確かに全ピクセルを描かないといけないと書いてありますね。
> 言われてみると、ループ毎に画面全体を描画しているタイトル画面は正常に表示されています。
> 皆様から色々なアドバイス頂いておりますが、いま開発環境に触れられない状況でして、結果
> をご報告できないのが心苦しい限りです。
> ご容赦ください・・・。
>
> なかなか奥が深くて、日曜プログラマーには難しいです。
> 引き続き宜しくお願いいたします。
>
> On 9月30日, 午前1:17, Yasuo Ohno <[EMAIL PROTECTED]> wrote:
>
>
>
> > こんばんは。大野と言います。
>
> > >以下のような流れ(細かいところは省略しています)でソースを書いているのですが、エミュレーターで実行すると、タイトル状態からプレイ状態に遷移した
> > >際、タイトル画像が残ったキャンバスと新たにゲームステージ&自キャラクター画像等が描画されたキャンバスが交互に表示される現象が生じます。
>
> > 内部的にDouble Buffer化されていて、PostはFront BufferとBack Bufferを入れ替えているだけ。
> > lockCanvasはBack Bufferを取得しているだけと考えると動作に納得いくかなと思って検索したら
> > 下記のページが見つかりました。http://groups.google.com/group/android-developers/msg/8d1243c33f9b7b6e
> > ※ 斜め読みしかしてないんで、、、もし間違っていたらすいません。
>
> > >どうしたらこういう状態になるのか分からないので、どの部分が問題か想像することもできずに困っております。
> > >holder.lockCanvas()で最新ビューのcanvasが取得できると理解しており、そのcanvas上で画像表示を繰り返しているだけで
> > >すので、何故2つのcanvasが交互に取得されるのか全く理解できない状況です。
>
> >http://developer.android.com/reference/android/view/SurfaceHolder.htm...()
>
> > The content of the Surface is never preserved between unlockCanvas() and
> > lockCanvas(), for this reason, every pixel within the Surface area must be
> > written. The only exception to this rule is when a dirty rectangle is
> > specified, in which case, non dirty pixels will be preserved.
>
> > Dirty rectangleが定義されていない限りは全PixelをUpdateしなければならないようです。
>
> >http://developer.android.com/reference/android/view/SurfaceHolder.htm...)
>
> > こちらを使って更新したい場所を指定するようにしてみるのはいかがでしょうか?
>
> > ご参考になれば幸いです。
> > はずしてたら すいません。
>
> > ==
> > Yasuo Ohno- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
--~--~---------~--~----~------------~-------~--~----~
このメールは次の Google グループの参加者に送られています: 日本Androidの
会
 このグループにメールで投稿: [EMAIL PROTECTED]
 このグループから退会する: [EMAIL PROTECTED]
 その他のオプションについては、次の URL からグループにアクセスしてくださ
い。 http://groups.google.co.jp/group/android-group-japan?hl=ja
-~----------~----~----~----~------~----~------~--~---