バグ2つつぶしましたので早めにリリースします。
http://shin.cside.com/product/shingl4/index.htm
バグ修正
- 左上を基点とするスプライト描画が縦横1ピクセル短い現象を修正しました。サンプル1で背景部分を見るとわかるはずです。
- フレームワークにて同一フレーム内でSEのplayの後にvolumeをセットした場合にplayが失われる現象を修正しました。
1つ目のバグはShinGL3にも初期のバージョンであったやつです。同じバグ埋め込んでしまいました。
2つ目のバグは以下のようにすると音が出ません。
context.playSE(0, SEManager.shot ); context.volume(0, 50);
新しいバージョンは上記のコードを書いてもちゃんと合算をして以下のコードと同じ動き(ボリューム半分で再生)になります。
context.playSE(0, SEManager.shot ,50);
新機能
- 線描画API(drawLine)を追加しました。
- テクスチャの一部分をスプライトとして描画可能なクラスを追加しました(SGSubTexture)。
- フレームワークに当たり判定のデバッグモードを追加しました。
- フレームワークサンプルにデバッグモードを追加しました。
- 描画エリアのサイズとウインドウサイズを一致させないことが可能になりました。
1つ目は座標を配列で渡すようになっています。つまり、2つの引数で1つの線。5つの線で四角が描画可能です。5つ目を始点とイコールにすることによって解決できます。
2つ目はたとえば256*256のテクスチャがあったとしてそのテクスチャを参照して64*128の部分だけ描画など柔軟に処理が可能です。描画命令を増やそうと思いましたが、ややこしくなるだけですので、SGTextureを継承したSGSubTextureとして実装しています。コンストラクタでSGTextureを指定しますので、今までどおり、リソース等からSGTextureを作成しておいて、わたしてあげてください。
たとえば以下のように使えます
SGTexture enemyBase = g.createSGTexture("pcg/enemy.png"); SGSubTexture enemy1 = new SGSubTexture(enemyBase, 0, 0, 32, 32); SGSubTexture enemy2 = new SGSubTexture(enemyBase, 32, 0, 32, 32); SGSubTexture enemy3 = new SGSubTexture(enemyBase, 64, 0, 32, 32); SGSubTexture enemy4 = new SGSubTexture(enemyBase, 96, 0, 32, 32); SGSubTexture enemy5 = new SGSubTexture(enemyBase,128, 0, 32, 32);
3つ目は4つ目のフレームワークサンプルを実行してもらうのが一番手っ取り早いです。
キーボードの「1」を押すとこのあたり判定が描画され、「2」を押すと解除されます。表示してみてわかったのですが、自機の当たり判定はコクピットっぽいところからずれていますね。重心を考えるとこのあたりで意外とちょうどよいものです。STGの場合やや後方に判定を用意すると体感上難易度が下がりやすいです。
サンプルのコードは「GameMain.java」にて以下のように書いています。
if(context.isKeyDown(KeyEvent.VK_1)){ context.setDebugLine(true); } if(context.isKeyDown(KeyEvent.VK_2)){ context.setDebugLine(false); }
デバッグ用の線の色と線の太さは指定可能です。実際サンプルでも「RootGameObject.java」にて以下のように設定しています。
context.setDebugLineConfig(Color.BLUE, 2);
5つ目はすでにShinGL3ではあった機能です。たとえば320*240を描画範囲にしておいて、ウインドウサイズは640*480ということが可能になります。解像度を変えながらもゲームの処理を変えたくない場合は多いと思いますので実装しました。640*200の描画エリアを用意して640*400のウインドウサイズを指定すればPC88等なつかしの縦長のドットになります。実際は640*480のウインドウサイズと640*240の描画サイズにしておいて40ピクセルを空白にしておくほうが現実的でしょうが。
わからないところがあれば質問してください。