绘制动画位图列表

时间:2011-07-19 11:12:14

标签: java android animation bitmap

所以我有这个不错的Android游戏(带动画的蛇克隆),做BAM的最终测试!我的第二个测试设备(Nexus 1,HTC Magic是我的1.)在绘图时闪烁。 有谁知道为什么这段代码无法正常使用Nexus 1?

public void draw(Canvas canv) {
int count = 0;
isHead = false;
for (int i = 0; i < SPACES; i++) {
    if (mDrawSpaces[i]) {
    count++;
    if (count == SPACES - 1) {
        setDrawSpacesToFalse();
        if (bmp != null)
        super.drawPlaceable(canv);
    }
    } else {
    mDrawSpaces[i] = true;
    return;
    }
}
}

我有一个鸟类(鸟类/不明飞行物/其他)的列表,其中SPACES(4)是在屏幕上绘制的元素的数量。所以我想,不是为每只鸟计算图片的旋转和比例,我只是在鸟之间有3个占位符,每个占位符一旦被设置为可见就会被绘制。这些图片是由第一个Bird生成的:

public void drawHead(Canvas canv) {
    //calculate the rotation & mirroring of the picture
    super.drawPlaceable(canv);
        //generate the pics for smaller birds following it
    mat.preScale((float) 0.6, (float) 0.6);
    this.bmp = Bitmap.createBitmap(SPRITESHEET, Bird.mCurFrame
        * BIG_W[mUseBird], 0, BIG_W[mUseBird], BIG_H[mUseBird],
        mat, true);
}

有什么想法吗?我的绘制(Canvas)方法在某些方面是错误的吗?

编辑:我不知道为什么,我不知道怎么回事,但今天下午我再次测试它时,神奇地工作了......

1 个答案:

答案 0 :(得分:0)

我可以看到你正在使用矩阵扩展 - 另一种选择是使用

canvas.DrawBitmap(spriteSheet, fromRect, toRect, paint);

其中toRect应该是任何大小的Rect类,这样在绘制游戏帧时就不会创建位图对象。该piant应该启用过滤器位图。

要旋转,您必须使用:

canvas.save();
canvas.rotate(spriteAngle,spriteCenterX, spriteCenterY);
canvas.DrawBitmap(spriteSheet, fromRect, toRect, paint);
canvas.restore();

对于许多2D游戏来说,这是一个足够快的代码,但不如OpenGL那么快和强大。