トップ 一覧 検索 ヘルプ RSS ログイン

Graphics_2Dの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!2D graphicsのページ
!!ツール
!ベクタ画像
:Illustrator:
:Flash:
!フィルタ
:Photoshop:
:Gimp:
!!プログラム
!GUI作成
:デザイナ(C#とか):
:WPF:
:Silverlight:
:Flash(ActionScript):
:HTML/CSS:
!描画の高速化・安定化
:ダブルバッファリング:
ゲームループ中に大量の描画を行う場合、描画の過程が目についてチラつく。このため、実際の画面とは別の画面(画像)に一度描画し、その内容を画面に一気に反映させる(ループと画面への描画を1:1対応にする)ことでこの現象を解消することができる。フレームワークによっては勝手にこの処理を行ってくれたりもする(.netやAndroid)
:フォームの問題:
Windowsのフォームアプリにおいて、コンテナに格納されたコントロールはコンテナが移動すればそれに追随して移動するが、各々の描画/移動タイミングが同一でないため、ぶれる。そのため、大量の物を描画するアプリでは結局自分でコントロールを描画することが求められる。
:ループ処理とブロッキング:プログラム中で時間がかかる処理を行うと、描画処理を解決できないのでGUIが固まる。解決方法としては、マルチスレッドにするか、処理の最中にイベント(クリックやキー入力など)の取得+その動作処理を行う部分を挟むかのどちらかになる。後者は、C#であればApplication.DoEventメソッドを呼び出せばよい。
:マルチスレッドでの問題:多くの場合、GUI用のクラスはスレッドセーフ(定義したスレッドと別のスレッドで操作可能)ではない。そのため、メインスレッドとは別のスレッドで行った処理をGUIに反映させるには、一時的にメインスレッドで操作を行うような命令を出す必要がある。例としては、BeginInvoke(C#)、Handler(java:Android)など。ゲームループ型のプログラムであれば、スレッドセーフなパラメータを操作して、メインループの中でその値の変化をチェックして反映させればよいため、特に面倒なことはないが、イベント型の場合は注意。
:3Dで2D:
DirectXは基本的に3D用のライブラリだが、ハードウェアリソースを利用できることから他の描画よりも高速な描画が可能なため、2Dの描画を行う上でも有用である。WPFはDirectXのラッパーであり、中身はDirectXである。初期設定などは3Dゆえの面倒さがあるが、回転/ズーム/視点変更が容易にできるため、ビューア系のアプリであれば十分元は取れる。
DirectXは基本的に3D用のライブラリだが、ハードウェアリソースを利用できることや、GDIを介さないことから他の描画よりも高速な描画が可能なため、2Dの描画を行う上でも有用である。WPFはDirectXのラッパーであり、中身はDirectXである。初期設定などは3Dゆえの面倒さがあるが、回転/ズーム/視点変更が容易にできるため、ビューア系のアプリであれば十分元は取れる。