良い一日!
はじめに
すでに1月4日であり、私の魂はまだ落ち着いていません。 そこで、私はJ2MEアプリケーションを書くというトピックを続けることにしました。 さらに、このトピックに深刻な関心を示した人もいました。 また、これらはHabrの一般ユーザーだけでなく、
読み取り専用アカウントでもありました。 まあ、大丈夫、トピックに近い。
文字通り、
トピックの公開直後に、非常に賢明なコメントがバーカー
habrayuzerから受け取られました。つまり、
commentは本質的に共通の真実であり、2番目のコメントは
修正です。
今日は何について話しますか
今日は、
javax.microedition.lcdui.Canvasでのダブルバッファリングのプロセスと、
javax.microedition.lcdui.game.GameCanvasが作成された理由について説明し
ます 。
ダブルバッファリングとは何ですか?
ダブルバッファリングは、2番目の(画面外)バッファを使用して図形やスプライトなどを描画し、その内容を画面にコピーする技術に過ぎません。 問題は、直接描画するとき、つまり 時間ごとに画面バッファーに直接描画すると、画面の再描画の時間間隔に適合せず(
Canvasではこれは
repaint()関数によって行われます)、画面は単に「点滅」を開始します。 ユーザーには、この描画自体の中間結果が表示されます。 この手法を使用すると、開発者はこれらの「点滅」を回避できます。 ただし、
Canvasでは、この手法
の使用は自転車の構築プロセスです。 標準およびJ2MEプラットフォームの開発者はこれを考慮しませんでした。
Canvasのダブルバッファリング
Canvasの「ダブルバッファリング」プロセスは、画像(
javax.microedition.lcduiパッケージの
Imageオブジェクト)をオフスクリーンバッファとして使用する
ことで実現されます。 このように:
import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; public class OurCanvas extends Canvas { Image img;
以上です。 コードには視覚的なコメント以上のものが含まれているため、コードを解析しても問題は発生しません。 ここで
GameCanvasの 「ダブルバッファリング」を検討してください。
GameCanvasのダブルバッファリング
しばらく経ち、J2MEコンソーシアムは
javax.microedition.lcdui.gameパッケージを開発しました。このパッケージには
GameCanvasが含まれていましたが、これは同じ
Canvasでしたが、「ダブルバッファリング」問題が解決されました。 プログラマーはそれを気にする必要がなくなりました。 コードは次のようになります。
import javax.microedition.lcdui.game.GameCanvas; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; public class OurCanvas extends GameCanvas implements Runnable { Graphics buf; Thread t; int w;
ここでは、バッファについて心配する必要はありません-すべてがすぐに描画され、
flushGraphicsが呼び出されると
、オフスクリーンバッファのすべてのコンテンツがスクリーンバッファにコピーされます。
それだけです
このレンダリングタスクはいくつかの行で解決されるという事実にもかかわらず、これは開発者が「泳ぐ」べきではないかなり重要なトピックです。 今日のレッスンが
前回よりも有益であったことを願っています。 それだけです、休暇を取らせてください。
じゃあね!
コーヒーを飲み、Javaで書きます。
ポスト台本
Pastebinで確立された伝統に従ってソースコードを取得できます。
これが
最初の例です。
そして、これが
2番目です。