【问题标题】:How to access a different row from a sprite sheet?如何从精灵表访问不同的行?
【发布时间】:2021-10-02 11:07:35
【问题描述】:

我正在使用一个教程来了解精灵如何使用 draw() 方法以及使用游戏循环来工作。据我所知,我为自己的项目调整了代码。

我的问题是,除了第二行之外,我如何访问精灵表的另一行。我的精灵表有 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);
    }
}

如何访问第二行以及如何将其更改为第三行或第四行?

到目前为止,我所了解的是,使用 sprite 作为对象作为位图,而不是通过 imageview,代码的代码实现的工作方式不同。关于如何访问精灵表的不同行有什么建议吗?我使用了 android 文档和教程来尽可能地理解这个过程。

这里也是教程: http://www.edu4java.com/en/androidgame/androidgame4.html

【问题讨论】:

    标签: java android android-studio android-animation sprite-sheet


    【解决方案1】:

    据我所见,您正在遍历第一行,依次绘制每个精灵,也许是为了创建动画。

    如果你想为第二行绘制动画,你可以简单地将'height'添加到'srcY'。看起来您有这个想法,但您减去而不是添加。请记住,计算机上的 Y 坐标是从上到下的(即 (0,0) 是左上角,(0, 10) 是低 10 个像素)。

    第三行和第四行同样如此,只需将 'height' 再次添加到 'srcY' 即可。

    【讨论】:

    • 感谢您的回答!我明白了我没有收到完整图像的意思,因为某些帧在精灵表中具有不同的像素大小。这就是为什么我减去以获得框架的准确大小的原因。添加高度给了我下一行,但上面和下面的行有残差。我会四处寻找解决方案,再次感谢您的回答!我想我也可以裁剪精灵表并减少我必须使其更简单的行数。再次,非常感谢大声笑。代码已经暗示我可以乘以高度!
    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 2023-03-20
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多