2009年4月4日土曜日

バグ修正作業とゲーム作成

まずは、たくさんのDLありがとうございます。二桁いけば良いほうかなーとか思ってたので、一晩でダウンロード数が30とかいっててびっくりしましたw
あと、ソースコードのダウンロード数の方が多かったのもちょっとびっくりでした。あまり見せられるようなコードではないので、うれしさと恥ずかしさでいっぱいです。
さて、早くもVer0.4.1を(バイナリだけ)公開中です。一部の関数に不具合が見つかったので、特定の条件を満たす場合のみ他の関数で代替しています。詳しい話は最後に書きます。
それから、昨日あたりからSTGを作り始めました。いろいろな都合のため締め切りが今月下旬でかなり厳しいですが、高校生活最後の作品としてがんばりたいです。終わったら受験モード全開です。
あ、もちろんDXライブラリPortableを使ったPSP向けゲームです。ライブラリのデモンストレーションとバグチェックを兼ねているわけですw
以降、今回直したバグに関するちょっと詳しい話。


ソースコードを見るとわかると思いますが、DrawGraphとDrawTurnGraphは内部的にDrawExtendGraphを呼び出して描画しています。
ところで、DrawExtendGraphは高速化のためにスプライトとしてGPUに描画コマンドを発行しています。スプライトというのはつまり、四角形の対角頂点の情報だけで描画する方式です。傾いた描画ができない代わりに、通常では4つ必要な頂点情報が2つで済みます。うまく使えばメモリの節約と若干のパフォーマンスアップをすることができるわけです。
そして、さらにDXライブラリではSlice描画を自動で行っています。GPUのキャッシュメモリを有効利用できるように一枚の画像を短冊状にバラして表示するわけです。
それでは今回のバグ、スプライトとSliceが織りなしたカオスワールドについてダイジェストでお話します。
①スプライト方式は2つの頂点情報しか使わない。そのため画像の左右(上下)が通常の反対になったとき上下(左右)も反転してしまう。
②Sliceを行っているために描画コマンド一回で表示する画像の領域の縦横比が大きくなりがち。
③結果としてよくわからない縦縞らしき模様が表示される。
図にするとこんなかんじ。
0.4.1にするとき直したバグの詳細

2 件のコメント:

  1. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    わかりました
    初歩的なことですみませんでした
    ありがとうございます

    返信削除
  2. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    わかりました。
    どうも、ありがとうございます。

    返信削除