gpt4 book ai didi

java - 如何在 Canvas 上有效地绘制许多像素?

转载 作者:搜寻专家 更新时间:2023-11-01 08:13:57 25 4
gpt4 key购买 nike

我正在 Android 上使用 Java 制作我的第一款游戏。我需要画很多像素,它们一起应该形成一条线。我的第一种方法是创建一个大型 boolean 数组,创建一个循环,并在关联的 boolean 值为真时绘制一个像素。

这当然不是一个好主意(数组大约为 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 paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setColor(Color.RED);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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com