如何从sprite工作表访问不同的行?

5kgi1eie  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(291)

我正在使用一个教程来了解精灵是如何使用draw()方法以及gameloop工作的。据我所知,我为自己的项目调整了代码。
我的问题是,除了第二行之外,我如何访问我的sprite工作表的其他行。我的精灵表有9列20行。

public class Sprite implements Drawable {
    private static final int BMP_COLUMNS = 9;
    private static final int BMP_ROWS = 20;
    private int x = 0;
    private int y = 0;
    private int xSpeed = 5;
    private Bitmap bmp;
    float fracsect = 30;
    private GameContent gameContent;
    private int currentFrame = 0;
    private int width;
    private int height;

public Sprite(GameContent gameContent, Bitmap bmp) {
    this.gameContent = gameContent;
    this.bmp = bmp;
    this.width = bmp.getWidth() / BMP_COLUMNS;
    this.height = bmp.getHeight() / BMP_ROWS;
}

@Override
public void update(float fracsec) {
    if (x > gameContent.getGameWidth() - width - xSpeed) {
        xSpeed = -5;
    }
    if (x + xSpeed < 0) {
        xSpeed = 5;
    }
    x = x + xSpeed;
    currentFrame = ++currentFrame % BMP_COLUMNS;
}

@Override
public void draw(Canvas canvas) {
    update(fracsect);
    int srcX = currentFrame * width;
    int srcY = 1*height - 41;

    Rect src = new Rect(srcX +20 , srcY,srcX + width,srcY + height-38); // Generates
    Rect dst = new Rect(x,y,x+width -30, y+height-30); // Scales
    canvas.drawBitmap(bmp, src, dst, null);
    }
}

如何访问第二行以及如何将其更改为第三行或第四行?
到目前为止,我所理解的是,使用精灵作为对象作为位图,而不是通过imageview,代码实现的工作方式不同。关于如何访问sprite工作表的其他行,有什么建议吗?我使用android文档和教程来尽可能地理解这个过程。
以下是教程:http://www.edu4java.com/en/androidgame/androidgame4.html

5m1hhzi4

5m1hhzi41#

从我所看到的,您正在迭代第一行,依次绘制每个精灵,可能是为了创建动画。
如果要绘制第二行的动画,只需将“高度”添加到“srcy”。看起来你有这个想法,但是你删减了而不是增加了。请记住,计算机上的y坐标从上到下(即,(0,0)是左上角,(0,10)是低10像素)。
同样,对于第三行和第四行,只需再次将“height”添加到“srcy”。

相关问题