因此,我有一个不错的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)倍。所以我心想,我没有为每只Bird计算图片的旋转度和比例,而是在Birds之间只有3个占位符,每个占位符都有一个在设置为可见时要绘制的图片。这些图片由第一只鸟生成:

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快而强大。

08-04 05:00
查看更多