java - 动画位图的绘图列表

标签 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;
    }
}
}

我有一个鸟类列表(鸟类/不明飞行物/其他),其空间(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);
}

有什么想法吗?我的draw(Canvas)方法在某些部分是错误的吗?

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

最佳答案

我可以看到您正在使用矩阵来缩放 - 另一种选择是使用

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 那么快和强大。

关于java - 动画位图的绘图列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6746227/

相关文章:

java - 如何调试 @Scheduled spring boot 方法或服务方法?

java - 所有异步任务都可以读取的变量

java - 无法更改应用程序图标。 (Studio从xml文件中选取它)有

android - 异步图像下载并存储在 ImageView 数组中

Flash AS3定时器问题

java - Java中如何将byte[](包括BCD编码值)解析为Object

java - TestNG 使用@Factory 和@DataProvider

java - 从 firebase 检索我的电话号码

javascript - 如何在添加类时设置顺序延迟?

Mouseenter 上的 jQuery 动画问题