2011-07-29 7 views
1

Slick 2D APIを使用したJavaでは、ビットマップをその世界として取り入れるゲームを作成しました。ビットマップのピクセルのアルファが0の場合、キャラクタが自由にローミングできる空とみなされます。さもなければ、それはしっかりしていて、動かすことはできません。Java Slick 2Dイメージピクセルが遅くなる、最適化されますか?

私のPCでは、CPU使用率の1%で動作させていました。それから私はラップトップで実行しようとしたとき、そのコアをピークにして、CPU使用率の50%で動作しました。

テストをした後、広範な関数呼び出しが画像のピクセルImage.getColor(x, y)を取得していることがわかりました。ここに興味深い部分があります。私はAllegro 5を使ってC++でこの同じ例を作り直しました。私のラップトップでは50%ではなく3%で動いていました。

Slick 2Dの画像からピクセルを効率的に取得する方法はありますか?

答えて

1

Imageオブジェクトをピクセル値の配列に変換し、配列から値を取得します。メソッド呼び出しの量が多すぎると、プログラムが大幅に遅くなります。

+0

画像からImageBufferを取得する単純な関数はないようです。私は手作業でピクセルを取得し、ImageBufferを塗りつぶす必要がありますが、これを行うとgetPixelを何千も呼び出すようになり、現在はフレームごとに3回しか呼び出していないので、現在行っています。ゲームをプレイしている間に、描くことによって世界を修正し、描画された地形を歩くことができるので、これを行う必要があります。 – Johnathan

+0

@Johnathan:それからSlick 2Dは、llaammeeです。 Javaでピクセルを操作する場合、効率的な方法はARGB * int *として各ピクセルを直接操作することです。それ以外は自殺です。 OS X * getRGB *は、Mac Miniで測定されたバッキング* int [] *からその値を直接読み取るよりも、最大で3桁大きい**(それは、1000倍)遅くなる可能性があります。狂気:( – SyntaxT3rr0r

+0

私は単純にそのようなエンジンを作るのを忘れるつもりです、あまりにも多くのトラブルのように聞こえますが、私は彼らがクロスプラットフォームであるWormuxでそれをどのように取り除くことができたのかまだ疑問に思っています。 – Johnathan

関連する問題