問題タブ [doublebuffered]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ちらつきのある Java キャンバスのズーム
キャンバスをズームインおよびズームアウトできるようにする必要があるプロジェクトに取り組んでいます。私は方法を使用しています:
そこからスケール変数を変更するだけです。これは機能しますが、ほとんどの場合、迷惑なちらつきが発生します。トリプルバッファなので、キャンバスを適切なサイズに変換するのにどうしてそんなに時間がかかるのかよくわかりません...
とにかく、私に欠けているものがあれば、知りたいです。
ここに私の update() メソッドがあります:
前もって感謝します、
木
編集: 「キャンバス」と言うときは、メイン クラスの基本クラスである java.awt.Canvas を意味します。混乱を招いて申し訳ありません。
sdl - HW_SURFACE での SDL ダブルバッファリング
私が求めているように、SDL アプリが DOUBLE_BUF を設定しない理由がわかりません。
これは短いコードです。引数なしで実行すると、32 BPP モードで 1024*768 のフルスクリーン ウィンドウが開きます。
ご覧のとおり、引数は次のとおりです。--window フルスクリーンを無効にする --no-hardwarememory SDL_HWSURFACE の代わりに SDL_SWSURFACE を設定 --testModes() 関数を呼び出す
これが私の出力です。
引数なし (フラグは "SDL_DOUBLEBUF | SDL_HWSURFACE | SDL_FULLSCREEN" です) 私はこれを取得します;
--test 引数を使用すると、次のようになります。
これをコンパイルしたい人のために、ここに main.h があります
だから、32bppフルスクリーンでDOUBLE_BUFが機能しない理由を理解したい..いくつかのアイデア?
java - Java Swing: drawLine が非常に遅い
正方形の上にグリッドを描画する必要があるswingを使用してJavaアプリケーションを作成しています。そのために、クラスdrawLine(...)
が提供するメソッドを使用しています。Graphics
各線を描画するのに多くの時間がかかることを除いて、すべて正常に動作します (50 行で 20 秒以上...)。線が引かれている様子もリアルタイムで見ることができます。奇妙なことの 1 つは、水平線が垂直線よりもはるかに速く (ほぼ瞬時に) 描画されることです。
私は何か間違ったことをしているかもしれません。グリッドのコードは次のとおりです。
vb.net - VB.NET Usercontrol Buffered Graphics
グラフィックがバッファリングされた基本的なユーザーコントロールを作成したかったのです。しかし、何かが正しくありません。Using gr As Graphics = Graphics.FromImage(m_Buffer) という行で停止します。
VS2010をクラッシュさせることさえできました。そのため、いくつかのエラーを導入したと思われます。サンプル コードからほとんどの部分をコピーしましたが、デザイナーで選択できるイベントの 1 つではなかったため、少なくとも OnPaint が呼び出されることはないと思います。
助けてくれてどうもありがとう!
クラス終了
c# - ダブルバッファ顧客描画リストボックス
リストボックスのアイテムを異なる色にできるように、カスタム描画メソッドがあります。問題は、値が変更されたかどうかを確認するために、500 ミリ秒ごとにリストボックスを再描画することです。これにより、リストボックスがちらつき、コードをダブルバッファリングする方法がわかりません。誰でも助けてもらえますか?
assembly - ダブルバッファリング、アセンブリx86
さて、私はAssembly x86(8086)でSpace Invadersゲームを作成していますが、これまでのところかなりうまく動作しています。グラフィックモードでアセンブリを使用しています13h
。つまり、320x200ピクセルと256色です。
描画にはサブ関数を使用しています0ch
。つまり、ピクセルごとに描画しています。問題は、画面がかなり速くクリアされ、視覚的な不具合が発生することです。
私は以前にいくつかのゲームをプログラムしましたが、解決策は二重バッファ描画である可能性があります。Assembly x86でこれを実現するにはどうすればよいですか?
編集
私はWindows8X64を使用して、コードDOSBox Portable、tasm、およびtlinkをテストおよび実行しています。
java - ウィンドウのサイズ変更後にコンポーネントのサイズを変更する
アプレット ゲームを作成しています。このゲームでは、アプレットのサイズを変更してブラウザ ウィンドウ全体に表示させたいと考えています。これが HTML で可能であることは理解しています。今のところ、サイズ変更が強制されることがあるアプレットがあると想定しています。
GridBagLayout を使用すると、サイズ変更中に多くのちらつきが発生するという問題がありました (再描画中に各 JPanel をクリアしているようです - 各 JPanel の update() メソッドをオーバーライドしようとしました)。ウィンドウのサイズ変更が完了するまで、ゲームのサイズ変更を遅らせることにしました - ちらつきを避けるためと、ゲーム コードで多くの迅速で小さなサイズ変更を処理する必要がないようにするためです。
私はこれのための作業コードを持っています。以下に添付します (少し簡略化されています)。ただし、これは、ウィンドウが両方向に大きく引き伸ばされている場合にのみ機能します。幅または高さが一瞬でも縮小すると、ゲームはすぐに左上隅の小さな正方形に折りたたまれます。
ゲームは正常に動作し続けますが、サイズ変更中に画像が一時的に覆われるようにするにはどうすればよいですか?
コードを説明すると、ゲーム レイアウト全体を GridBagLayout の最上位の位置 0,0 に重みなしで含む 1 つの JPanel があります。各方向の重みが 1.0 の位置 1,1 に空のラベル (emptySpace と呼ばれる) があります。
次のコードを使用して、サイズ変更中を除いて、ゲーム ウィンドウがスペース全体を占有するようにします。
java - Java でのダブル バッファリング
インターネットでダブルバッファリングのこのコードを見つけましたが、説明がありません。私はこのコードで少し混乱しています。
画像「i」が使用されているのはなぜですか? 一度使用する場合、その用途は何ですか?
すでに色を設定しているのに、前景色に変更色を割り当てるのはなぜですか?
g.drawImage() メソッドは何をしているのですか?
コードは次のとおりです。
よろしく
c# - 画像をスムーズに動かすにはどうすればよいですか?
パネル上でマウスを動かすと動く形のPictureBox画像があります。
思い通りに動いていますが、いつもちらつき(リフレッシュなど)していて、フォームに問題があることを知りました。
フォームのコンストラクターで次のコード行を試しましたが、成功しませんでした。
これは、すべての画像を表示するのに役立つ場合のマウス移動のイベントハンドラーです。chipHolderはパネルで、imageはファイルからインポートされた画像です。
何か案は?
c# - UserControl で大きなキャンバスをレンダリングする
ここ数日、これを実装しようとして問題が発生しています。私がやろうとしていることに関して同様の質問を広範囲に検索しましたが、私の問題に直接役立つ質問に出くわしていません。
UserControl
基本的に、クラスのグリッドにタイルをレンダリングしています。これは、私が開発している Tile Engine ベースのワールド エディター用です。これは、オープン ワールド ドキュメントといくつかのタイルをブラッシングしたスクリーンショットです。
Bitmap
最初は、ワールドのプレビュー キャンバスとなる を自分のコントロールで使用するつもりでした。たとえば、ブラシ ツールを使用すると、マウスを動かして左ボタンを押したままにすると、カーソルの下にある最も近いタイルがブラシのタイルに設定され、layer
ビットマップにペイントされます。コントロールのメソッドは、ペイント イベントのクリッピング四角形に関してビットマップが描画OnPaint
される場所にオーバーライドされます。layer
この方法の問題点は、大きなワールドを扱う場合、ビットマップが非常に大きくなることです。このアプリケーションは、ワールド サイズに対応できるようにする必要があります。無効化されるたびに大きなビットマップをコントロールにレンダリングすると、パフォーマンスの問題が発生することは明らかです。
現在、コントロールのオーバーライドされたOnPaint
イベントでタイルをコントロールに直接描画しています。多くのメモリを必要としないため、これは素晴らしいことです。たとえば、タイルごとの(1000, 1000)
ワールド(20, 20)
(合計キャンバス サイズは(20000, 20000)
) は、アプリケーション全体で約 18 MB のメモリで実行されます。コントロールが無効化されるたびに、ビューポート内のすべてのタイルを反復処理するため、メモリを集中的に使用するわけではありませんが、かなりプロセッサを集中的に使用します。これにより、非常に厄介なちらつきが発生します。
私が達成したいのは、メモリ使用量とパフォーマンスの点で中間を満たす方法です。コントロールが再描画されるとき (フォームのサイズ変更、フォーカスとぼかし、スクロールなど) にちらつきがないように、基本的に世界をダブル バッファーします。Photoshop を例にとると、開いているドキュメントがコンテナのビューポートからはみ出す場合、どのようにレンダリングするのでしょうか?
OnPaint
参考までに、上記の直接描画方法を使用している私のコントロールのオーバーライドを次に示します。
getRenderBounds
PaintEventArgs.ClipRectangle
世界のすべてのタイルをループして表示されているかどうかを確認する代わりに、表示されているタイルをレンダリングするために使用される四角形を返します。
私のコードからさらにコンテキストが必要な場合は、コメントしてください。