【JAVA】2Dアクションゲームを作る【初級】at GAMEDEV
【JAVA】2Dアクションゲームを作る【初級】 - 暇つぶし2ch158:名前は開発中のものです。
09/04/14 17:40:52 Wx3DB5EW
>>144
すげえあたまいい・・・と感動してしまった

159:名前は開発中のものです。
09/05/14 21:04:29 jnlC9FY/
>>146
     オハヨー!!
    ∧∧ ∩
    (`・ω・)/
   ⊂  ノ
    (つノ
     (ノ
 ___/(___
/  (___/
 ̄ ̄ ̄ ̄ ̄ ̄


160:名前は開発中のものです。
09/11/04 00:17:42 mdwZ7HUY
アニメーションの表示ってどうやってます?
俺はコンピュータ内蔵の時計呼び出してその値からやってるんだけど、
そうするとポーズ画面のあと再開したときにアニメーションがずれちゃうんだよ
どうしたらいいかな

161:名前は開発中のものです。
09/11/04 10:26:18 MgRdkNpl
経過時間を算出するようにして
ポーズ中は経過時間が増えないようにするとか

162:名前は開発中のものです。
09/11/04 21:22:33 OEwandvL
ゲームのはなしじゃないの?
フレーム単位で処理するからずれるとかはないとおもうけど

可変フレームのはなし?

163:名前は開発中のものです。
09/11/04 21:46:58 wmTV4PxT
可変フレームでもアニメのコマnからn+1へ描画させるタイミングをフレームを考慮した時間後に書き換えるからずれはしない。
何か忘れてる。

164:名前は開発中のものです。
10/03/02 23:08:25 Ex3WWwU3
test

165:名前は開発中のものです。
10/05/07 20:42:20 WillkCAw
javaはpng画像の表示は重いですか?
マリオ風をつくってるんですがgifで表示させてた時よりカクカクします。
フルカラー+透過を実現したくてpngにしたんですが…。

166:名前は開発中のものです。
10/05/07 21:15:05 j/r3kS3U
ソフトウェア描画だからな
それでなくても透過合成は重い部類だし

167:名前は開発中のものです。
10/05/07 23:37:10 KEJO6T7M
αブレンディング使ってるならハードウェアアクセラレーションがきいていても使っていないときよりは速度は落ちる
スペックにもよるが32*32のスプライト10万個くらいだすと60fps維持できないと思う

168:名前は開発中のものです。
10/05/08 20:58:02 2Mve6/zz
アルファチャンネルじゃなくて、普通の透過なんですけどね…。
別の方法試してみようと思います。ありがとうございました。

169:名前は開発中のものです。
10/05/08 22:13:03 +nu9nO6K
ならコードが悪いだけだな

170:168
10/05/09 01:02:49 f5Ph/Aqm
>>169
drawImageでダブルバッファリングしながら表示させてます。
1000*1000くらいの大きな画像に24*24くらいのマップチップやキャラチップを並べて、
drawImage(img, x1, y1, x2, y2, imgX1, imgY1, imgX2, imgY2, observer);
でimgX1~imgY2を指定してチップを表示してるんですが、もしかして各チップを
一つずつのファイルに分けた方が高速ですかね?それともdrawImage使うのがそもそもダメですか?;;

171:名前は開発中のものです。
10/05/09 10:10:47 Pu1jTf/z
転送元と転送先のImageはなに?
あとJavaはJavaSE6update10以上つかってる?

172:168
10/05/09 16:51:18 f5Ph/Aqm
転送元と転送先のImageというのは、描画する画像の型と描画先の画像の型という意味でいいですか?
一応Image型をBufferedImage型に描画してます。
転送元がImage型だからカクカクするのかなと思ってBufferedImage型→BufferedImage型も試してみましたが
あまり改善されませんでした。
JavaバージョンはJavaSE6update18です。

173:名前は開発中のものです。
10/05/09 21:02:07 Pu1jTf/z
転送元がImageということはどういうフォーマットになっているかわからないってことかな。

描画バッファから画面への転送の方法とかどうしているかも気になる。

あとはピクセルフォーマットを同設定しているかか。

転送もとのフォーマット
描画バッファのフォーマット
画面のフォーマット

これらをどう設定しているかにもよる。

あとImageの分割もやってみた?32bppだと1000*1000で4MBも食うわけで。

174:名前は開発中のものです。
10/05/09 21:14:11 o2jE/Yfm
もうハードウェアアクセラレーションが効く環境に変えちゃえばいいのに
アホみたいに速いよw

175:名前は開発中のものです。
10/05/09 22:56:26 eCAtLDK5
>>168
カラーが24bitなら透過は8bitになってると思うよ
そして全ての透過値が0xffか0x00しかなくても、8bitのアルファチャネルがあるのと同様のロジックが走る
アクセラレーションが効いてなければ結構描画効率は落ちる

マリオみたいなゲームなら1チップに255色以上使う必要性も少ないだろうし、
リソース合成時かゲーム起動時に減色して透過インデックスを指定するようにしたらどうかな

176:168
10/05/10 01:29:54 CH9wxDuw
皆さんありがとうございます。
URLリンク(javagame.skr.jp)
に書いてある、repaint()を使わないで描画する方法(アクティブレンダリング)というのをやってみたら大分カクカクが収まりました。

>>173
すいません、勉強不足で仰られていることの意味がわからないんでコード晒します。
>>168からいろいろ変えてみて、今現在、

Image img = Toolkit.getDefaultToolkit().getImage(getClass().getResource(filename));
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(img, 0);

try {
tracker.waitForID(0);
} catch (InterruptedException e) {
e.printStackTrace();
}

BufferedImage bimg= new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_4BYTE_ABGR);
Graphics g = bimg.createGraphics();
g.drawImage(img,0,0,null);

でpng画像をbimgに読み込んだ後、drawImageでオフスクリーンバッファに描画してます。
画面への転送方法は先程も書きましたがrepaint()を使わない方法に変えてみました。

あと、画像を最初にBufferedImageで読み込んでいても、チップは分割しておいたほうがいいですか?

>>174 すいません、軽く調べましたがなんか難しそうなので諦めます。
>>175 そうなんですか。うーん、どうしてもフルカラーでいきたいんですよね…。無理そうならgifに戻すことにします。

177:名前は開発中のものです。
10/05/10 22:09:49 rdBA97qw
画像のロードは遅延読み込みやりたいわけじゃないならImageIOつかうとよいよ。転送待ちをする必要ないし。

あとABGRとかARGBとか順番によって大きく速度が変わるからピクセルフォーマットは意識したほうがよい。

転送先はVRAM、もしくはコンパチブルピクセルフォーマットのほうがいいよ。
そして転送元もあわせたほうがよい場合が多い。

あとは特定色の透過をしたい場合TransparencyがBITMASKになってると大概早いはず。

178:名前は開発中のものです。
10/05/11 10:35:00 RB0dCl6F
初級って書いてあるから開いてみたけど
話が難しすぎてさっぱりわからないwww
ダメだ俺orz


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch