2016-06-01 5 views

答えて

1

「まったく同じ」という意味に依存します。

あなたのコードからdraw-something()を呼び出すことに関しては、通常通りに行われます。異なっているのは、レンダリングチェーンのどこかで、実際のレンダリング領域に実際には入っていないという条件が検出され、その形状に対して実際にピクセルが出力されないということです。

「画面上に何か」があるかどうかを検出するためには、画面を定義する内容によって異なります。これは、Graphicsオブジェクトで記述された領域(画面の一部であっても、画面から完全に離れていても、プリンタであってもかまいません)として定義するのが合理的です。

Graphicsインスタンスのクリップ領域を変更していない場合、getClipBounds()はグラフィックスが実際にレンダリングされる矩形を提供します。スウィングコンポーネントからのグラフィックスの場合は、レンダリング領域のコンポーネントのサイズを置き換えることもできます。

実際の矩形を取得したら、Shapeが提供するメソッド(contains()、intersects()など)を使用して衝突を検出できます。

+0

"まったく同じ方法"とは、オフスクリーンシェイプをレンダリングするときのパフォーマンスの点で違いがないことを意味しました。 – RoiEX

+0

@RoiEXパフォーマンスの差がかなり大きくなる可能性があります。何かが実際に描画される前に、グラフィックスに割り当てられたすべてのメモリバッファのサイズが制限された後、実際にレンダリング領域内にあることを確認する必要があります。外側に描画するとプログラムがクラッシュする:)チェックは常にそこにあり、条件付きで重い作業のすべてまたは一部はスキップされます。 – Durandal

関連する問題