我正在 Android 上使用 Java 制作我的第一个游戏。我需要绘制很多像素,它们一起应该创建一条线。我的第一个方法是创建一个大型 boolean 值数组,创建一个循环,并在关联的 boolean 值为 true 时绘制一个像素。
这当然不是一个好主意(数组大约为 200x300)。现在我只记得该行第一个像素的位置,接下来的每个像素都必须记住他的跟随者。它工作得很好,但是当线路变长(但仍然不是很长)时,效率很差(4000 帧后 <20 fps)。
这是我用来画一条线的函数(目前只有一个)。有人可以帮助我提高效率吗?
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(在我的手机(三星 Spica)上,它运行得更好 - 40,但一段时间后,它下降到 20 甚至更少),983 是帧数。
最佳答案
canvas对象中有一个drawLine方法。
使用此处的示例:How to draw a line in android
canvas.drawLine(0, 0, 20, 20, paint);
如果你想画一条曲线。求曲线的函数。例如,抛物线是 x=y^2。您可以从曲线中获取点:1 = 1、2 = 4、3 = 9、4 = 16...等等。如果您逐像素绘制,您可以插入 x 并获取 y 并绘制它。
油漆油漆=新油漆(Paint.ANTI_ALIAS_FLAG); 油漆.setColor(颜色.红色); Paint.setStrokeWidth(3);
for(int i = beginx; i < CanvasWidth; i++)
{
int x = i;
int y = i * i; //x=y^2
canvas.drawPoint(x, y, paint);
}
要记录访问过的点,您可以执行以下操作:
class Point
{
int x;
int y;
}
List<Point> points = new List<Point>();
onMove(int newX, int newY)
{
Point p = new Point();
p.x = newX;
p.y = newY;
points.add(p);
}
onDraw()
{
for(Point p : points)
{
canvas.drawPoint(p.x, p.y, paint);
}
}
关于java - 如何有效地在 Canvas 上绘制多个像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6750820/