私はAndroidでJavaを使用して最初のゲームを作っています。私は一緒に線を作成する必要がある多くのピクセルを描画する必要があります。私の最初のアプローチは、ブール値の大きな配列を作成し、ループを作成し、関連付けられたブール値が真のときにピクセルを描画することでした。Canvasに多くのピクセルを効率的に描画するにはどうすればよいですか?
当然のことではありませんでした(配列は約200x300です)。今私はラインの最初のピクセルの位置だけを覚えており、次の各ピクセルはフォロワーを覚えていなければなりません。それはかなりうまくいきますが、ラインが長くなると(しかしそれほど長くはありません)、効率は悪いです(< 4000フレーム後に20fps)。
これは、私が線を描画するために使用する関数です(今のところ1つだけです)。誰も私の効率を改善するのに役立つことができますか?
public void drawLine(Canvas canvas, int beginx, int beginy) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.RED);
paint.setStrokeWidth(3);
int x = beginx;
int y = beginy;
while(C.mGrid[x][y].nx != -1) {
//canvas.drawLine(x, y, C.mGrid[x][y].nx, C.mGrid[x][y].ny, paint);
canvas.drawPoint(x, y, paint);
Grid temp = C.mGrid[x][y];
if ((C.mGrid[x][y].nx == x) && (C.mGrid[x][y].ny == y)) break;
x = temp.nx;
y = temp.ny;
}
}
とGrid.java:
package com.qwak.achtung;
public float x = 0,y = 0;
public int px = -1, py = -1, nx = -1, ny = -1;
public Grid(float x, float y) {
this.x = x;
this.y = y;
}
public void set(int px, int py, int nx, int ny) {
this.px = px;
this.py = py;
this.nx = nx;
this.ny = ny;
}
public void setp(int px, int py) {
this.px = px;
this.py = py;
}
public void setn(int nx, int ny) {
this.nx = nx;
this.ny = ny;
}
PS:このhttp://c.wrzuta.pl/wi10559/11f7d10b00110e504e25ebd3/0/andek 14のように見えますが、FPS(自分の携帯電話(サムスンスピカ)の上に、それはより良い実行している - 40が、後に、それは20に減少します983はフレーム数です。
私は行を書く方法を知っていますが、曲線のように(?英語は私の母国語ではありません)、2点間の単純な線として記述することはできません。 –
回線の機能を見つける必要があります。すなわちx = y^2(曲線)であれば、描画したい各点を差し込むだけでよい。それは配列を使うよりも効率的です。元の投稿に追加します。 –
これはhttp://c.wrzuta.pl/wi10559/11f7d10b00110e504e25ebd3/0/andek 14はfpsです(私の電話(samsung Spica)ではそれはより良い走りをしますが、40を超えた後は20とそれ以下に減少します) 983はフレーム数です。 –