gpt4 book ai didi

java - 动画位图的绘图列表

转载 作者:行者123 更新时间:2023-12-01 05:42:29 25 4
gpt4 key购买 nike

所以我得到了这个很棒的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com