所以我有这个不错的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)方法在某些方面是错误的吗?
答案 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那么快和强大。