我正在Android上使用Java進行我的第一個遊戲。我需要畫出許多像素,這些像素一起應該創建一條線。我的第一種方法是製作大量的布爾值,創建一個循環,並在相關的布爾值爲真時畫一個像素。如何在Canvas上高效地繪製多個像素?
當然這不是個好主意(該數組大約是200x300)。現在我只記得線的第一個像素的位置,並且每個下一個像素都必須記住他的追隨者。它工作得很好,但是當線條變長(但還不是很長)時,效率很差(在4000幀後20幀/秒)。
這是我用來畫線的功能(現在只有一個)。任何人都可以幫助我提高效率嗎?
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(在我的手機上(三星Spica),它運行得更好--40但過了一段時間它減少到20甚至更少)而983是所有幀數。 –