jbox2dオブジェクトをサーフェイスビューに描画して遊んでいますが、実際には私が得ているフレームレートには満足していません(10-13、画面上に複数のオブジェクトがあるとき/ 26-30)。SurfaceViewからより多くのFPSを取得すると、何か改善できますか?
while (isRun)
{
Canvas canvas = holder.lockCanvas();
_update(canvas); /// <- call to update
holder.unlockCanvasAndPost(canvas);
}
...
canvas.drawColor(0xFF6699FF);
for (Body b = world.getBodyList(); b!=null; b = b.getNext()) // <- cycle through all the world bodies
{
rlBodyImage bi = new rlBodyImage();
bi = (rlBodyImage) b.getUserData();
float x = b.getPosition().x*scale + wOffset + camera_x + camera_x_temp;
float y = b.getPosition().y*-scale + hOffset + camera_y + camera_y_temp;
canvas.save();
canvas.translate(x - (bi.getImage().getWidth()*bi.getCoof()*scale)/2 , y - (bi.getImage().getHeight()*bi.getCoof()*scale)/2);
canvas.scale(bi.getCoof()*scale , bi.getCoof()*scale);
canvas.rotate((float) -(b.getAngle() * (180/Math.PI)) , bi.getImage().getWidth() /2 , bi.getImage().getHeight() /2);
canvas.drawPicture(bi.getImage()); // <- draw the image assossiated with current body on canvas
canvas.restore(); // images are stroed as "Pictures" , extracted from SVGs.
}
よりシンプルSVGsを使用して、もちろん他のものをスピードアップするための方法、それからはありますか? :) ありがとう!
EDIT:
うん、PNG画像に切り替える必要があります、彼らはずっといいFPS率を与えます。スケーリング
ベクトル画像= 10 ... 13 ... 16 FPS
PNGのみ= 35 ... 40 + FPS
PNG = 32 ... 37+ FPS
PNGとスケーリング&回転= 27+ FPS
答えをいただきありがとうございます。PNGの問題は、ユーザーがズームインまたはズームアウトしたときに回転および拡大縮小する必要が生じたときに始まります...一方、回転はSVGの回転角度をすべてレンダリングすることで解決できます1つの大きなスプライト...しかしスケーリング... –
>>>あなたはあなたのすべての画像を含む1つの大きなスプライト/ imageatlasを作成する必要があります<<これは同様に(SVGから入手した)画像でドームになると思いますか? PNGに交換することを決めた場合にのみ、私はそれに入るべきですか? –
2.3のNexus Sを持っているので、うまくいけばそれほど古くはありません。デバッグでは20を超え、平均では26-30です。 22は本当に複雑になりました。 :)あなたはJNI/Box2dをJBox2dよりも使用することの改善がどれだけ素晴らしいと思いますか? –