![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在、下記のpaint関数がrepaint関数を使って50ミリ秒きざみで呼ばれます。すると、画面がチラツクのです。
良い方法はありませんでしょうか?
ちなみにdrawImageしている絵は最初の一回だけ描画して、
その絵の上にdrawStringを使ってミリ秒単位で字が書かれるのです。
**************************************************
public void paint(Graphics g) {
if (g.drawImage(im, 0, 0, this) != true) {
System.out.println("Song_ng");
}else{
//A描画
g.setColor(Color.black);
g.setFont(FontA);
g.drawString(strTitleA, 90, 25);
//B描画
g.setColor(Color.black);
g.setFont(FontB);
g.drawString(strTitleB, 5, 55);
//C描画
g.setColor(Color.black);
g.setFont(FontC);
g.drawString(strTitleC, 15, 85);
//D描画
g.setColor(Color.black);
g.setFont(FontD);
g.drawString(strTitleD, 105, 120);
}
}
*************************************************
私なりに画面のチラツキ防止のためにupdate関数を下記のように修正したのですが、チラツキが良くはなりません。
*************************************************
public void update(Graphics g){
paint(g);
}
*************************************************
No.3ベストアンサー
- 回答日時:
#2です。
ダブルバッファリングについて概略だけ説明します。
大きく分けて、2つの作業が必要です。
A.paintメソッド内でのロジック
1.隠し画面用のメモリを確保
Image buff = createImage( ... ); //java.awt.Compenentのメソッド
2.隠し画面に書き込むためのグラフィックコンテキストを取得
Graphics g2 = buff.getGraphics();
3.画面を完成させる
g2.drawText( ... );
4.完成したものを一気に表示
g.drawImage(buff, ...... );
B.updateメソッドをオーバーライド
//updateメソッドは一度画面を消去して再描画するため、上書きして消去させない
public void update(Graphics g){
paint(g);
}
非常にわかりやすいご説明ありがとうございました。
教えていただいた点を踏まえて組んでみようと思います。
本当にありがとうございました。
No.2
- 回答日時:
画像と文字を重ねて(同じ場所に)表示させていて、
文字がちらついているのだと思いますが、
これは画像が表示される際に文字を上書きして消していることが原因です。
解決するには、
1.画像と文字を重ねない
->文字が画像によって消されることがなくなる
2.見えないところで表示するべきものを完成させて、
完成したものを一気に表示する。
->ダブルバッファリング
のどちらかになります。
画像と文字を重ねたいのなら、ダブルバッファリングを使うしかありません。
No.1
- 回答日時:
誤解があるのかもしれませんが、文字も全てグラフィクスとして描画されます。
gに直接描画されているようですが、Javaならずとも画像のプログラミングでちらつきをなくするためにダブルバッファリングを実装するのは定石ではないでしょうか。http://www.codec.co.jp/netscape/javascrl.html
http://www.wakhok.ac.jp/~tatsuo/kougi98/8shuu/do …
お答えありがとうございました。
教えていただいたURLを参考にダブルバッファリングで組んでみようと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- 洋画 HK243 S SAR には色が黒の奴はあるのでしょうか? HK243 の “SAR” (Semi- 1 2022/08/26 08:09
- その他(アニメ・マンガ・特撮) このイラストの元ネタはなんだかわかりますか? とりあえず2名の方が描いてますが、キャラがあるんでしょ 3 2023/04/10 09:50
- 工学 制御工学の問題です。次の伝達関数のボード線図を直線で近似して概形を描く方法を教えてください。 G(s 1 2022/07/04 06:44
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- Illustrator(イラストレーター) medibang paintで絵を描いて、A3やB3でコピーしたら線の画質が粗くなったのですが、解決 2 2023/04/04 06:48
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- 画像編集・動画編集・音楽編集 medibang paint を使っているのですが、 [画像をレイヤーとして開く]で写真をトレースし 2 2023/03/18 04:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETのSendMessageを教えてく...
-
画面のちらつきの原因が知りた...
-
VB.NET フォーム上に描いたグ...
-
JAVAでの背景画像表示
-
SwingとEDT(イベントディスパッ...
-
C# DataGridView のCellPaintin...
-
重なった要素上でのイベントで...
-
JavaのString、StringBuffer、C...
-
「タイプ初期化子が例外をスロ...
-
次の日本語の意味を教えて下さい
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
C#において、同じインスタンス...
-
VBA 同じ名前のオブジェクトを...
-
java eclipse 型に解決できません
-
Excelで =EMBED("Acrobat Docu...
-
VB.NET getとsetの概念がわかり...
-
エクセルVBAにおけるON TIMEメ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVAでの背景画像表示
-
VB.NET フォーム上に描いたグ...
-
VB.NETのSendMessageを教えてく...
-
C# DataGridView のCellPaintin...
-
Javaで文字の角度を変えて表示...
-
canvasで表示されてる画像を1...
-
画面のちらつきの原因が知りた...
-
Labelコントロールの背景をグラ...
-
重なった要素上でのイベントで...
-
java.awt.peer?
-
Canvas等の図形を移動する時,直...
-
OpenLayersの描画を固定で表示...
-
ID3DXSprite::Drawメソッドに関...
-
SwingとEDT(イベントディスパッ...
-
C#のGraphicsクラスについてです。
-
複数画像表示切り替え Visual c++
-
Androidのフォントサイズ(SP)と...
-
Androidで画像の中で指定した範...
-
描画処理が実行されない
-
JavaScript でスライダーを作る...
おすすめ情報