Java 如何在画布上高效地绘制多个像素?

Java 如何在画布上高效地绘制多个像素?,java,android,Java,Android,我正在Android上使用Java制作我的第一个游戏。我需要画很多像素,这些像素加在一起会形成一条线。我的第一种方法是制作一个大型布尔数组,创建一个循环,并在相关布尔值为真时绘制一个像素 这当然不是一个好主意(阵列大约是200x300)。现在我只记得线的第一个像素的位置,下一个像素必须记住他的跟随者。它工作得很好,但是当线条变长(但仍然不是很长)时,效率很差(画布对象中有一个drawLine方法) 使用以下示例: 如果你想画一条曲线。找到曲线的函数。例如,抛物线是x=y^2。你可以从曲线中得到点

我正在Android上使用Java制作我的第一个游戏。我需要画很多像素,这些像素加在一起会形成一条线。我的第一种方法是制作一个大型布尔数组,创建一个循环,并在相关布尔值为真时绘制一个像素


这当然不是一个好主意(阵列大约是200x300)。现在我只记得线的第一个像素的位置,下一个像素必须记住他的跟随者。它工作得很好,但是当线条变长(但仍然不是很长)时,效率很差(画布对象中有一个drawLine方法)

使用以下示例:

如果你想画一条曲线。找到曲线的函数。例如,抛物线是x=y^2。你可以从曲线中得到点:1=1,2=4,3=9,4=16…等等。如果你一个像素一个像素地画,你可以插入x,得到y,然后画出来

油漆油漆=新油漆(油漆.防油漆别名标志); 油漆。设置颜色(颜色。红色); 油漆。设置行程宽度(3)

for(int i=beginx;i
要保存访问点的记录,您可以执行以下操作:

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);
    }
}
类点
{
int x;
int-y;
}
列表点=新列表();
onMove(intnewx,intnewy)
{
点p=新点();
p、 x=newX;
p、 y=新的;
增加(p);
}
翁德劳()
{
对于(点p:点)
{
画布.绘图点(p.x、p.y、油漆);
}
}

您想研究一下bresenham算法。bresenham算法是一种绘制或光栅化直线的方法。它与网格在某个角度的细分有点不同,例如morton曲线。这有点像计算每个角度的标量积,就像回忆这里一样。

我知道如何写直线,但它更像曲线(?英语不是我的第一语言)它不能被描述为两个点之间的简单直线,而是许多点之间的直线。你需要找到直线的函数,即x=y^2(曲线),然后你只需插入你想要绘制的每个点。这将比使用阵列更有效。我将添加到我的原始帖子中。看起来这14是fps(在我的手机(三星Spica)上,它运行得更好-40,但一段时间后,它会减少到20甚至更少)983是帧的数量。你想做什么?这是有人用手指画线吗?如果你只是添加到线,考虑创建一个位图,然后改变位图上的像素,最后调用它。使用StPixIn功能黄点I的当前位置的球员;使用dpad你可以向左/向右…是的,我用它来“检查”在两帧中创建的两个点之间的像素。(我想在阵列中检查它)。它当前处于关闭状态,因为我有效率问题/
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;
}
canvas.drawLine(0, 0, 20, 20, paint);
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);
    }
}