ARGENTO CUORE

 May the code be with you.

--.--.--[--] スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2010.04.25[日] Java2Dの描画性能

java.awt.image.VolatileImageというクラスを初めて使ってみました。
VRAMに直接描画するという説明が書いてあったので、爆速なんだろうと思って。

でも、世の中そんなにうまくはいかなかった。
俺の実装方法がまずいのかもしれなくて、うまくいかない……。

透過色のない画像を使う場合には秒間60フレームで数千個の32x32pxの画像を表示してもまったく処理落ちせず、問題がないように見えたんですが、透過色を扱おう(TYPE_INT_ARGBのBufferedImage)とした場合にものすごく遅くなった。200個の32x32pxの画像を表示させて30fps。Thinkpad x61、Ubuntu9.10の環境で。

で、なんとかできないものかと思い、ピクセルを1つずつ見て、こいつはコピーする、こいつは背景色を優先させるって判定したら透過が実現するかなーと思って、VolatileImage -> VolatileImageへのコピーメソッドを自作しようとしたら、BufferedImageのようにgetRaster()などのラスタ情報を取得したりするメソッドがないことに気付いて断念。

VolatileImageからVolatileImageへの転送は諦めて、BufferedImage.TYPE_INT_ARGBだと遅くなるので、BufferedImage.TYPE_INT_RGBからVolatileImageへの転送を、透過するかどうかを取捨選択するメソッド(自作drawImage)を挟んで実行させたら、処理の結果自体は良いんだけど、またまた処理が遅くなりました(200個の32x32pxで23-25fps)。

最初に戻って、VolatileImageを使うのやめてBufferedImageを使うようにして、今現在32x32pxの画像が200個で最大83~90fpsくらい出てる。最初の、1フレーム数千個の物体を描画できたことが忘れられなくて、色々考えたんだけど、BufferedImage -> BufferedImageが現時点での最適な方法なんだろうか……。

ちなみにJavaの話だけど、使ってる言語はScalaです。

ライブラリも、とりあえず、描画、入力、シーン遷移系は実装し終わったので、次はサウンド関連と、鬼門?なジョイスティックをどうするか考えなければ……。

サウンドに関して、midiやwavを作るだけの知識はないので、どうしようかなーと思っていたら、

http://www.hakkaku.net/articles/20090423-422

↑のサイトがjavax.sound.sampled~を使って楽しいことしてました。

ピコピコ音鳴らしてみよう!

学生時代に、友人の友人が音を作る人で、「音は役割としては脇役ですから」みたいなことを言ってたんだけど、
ゲームとか映画とか音なしで見てみると良い。音楽は偉大です。脇役になるなんて許さない。
スポンサーサイト

Comment






(編集・削除用)


管理者にだけ表示を許可

Trackback

http://ronor.blog81.fc2.com/tb.php/69-f1db7070

この記事にトラックバック(FC2Blog User)

Scala Feed

scala feed

FC2カウンター

プロフィール

RoNor

Author:RoNor
得意呪文はScalaですって言えるようになるのが夢です。
デスマーチ中、パーティメンバーの防御力を向上させたりさせなかったり。

検索フォーム

QRコード

QRコード

Copyright © 2009-2010 ARGENTO CUORE and RoNor All rights reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。