2011-07-25 269 views
0

我正在写一个游戏,现在我开始意识到性能有待提高(link to game (market))。动画与旋转

如果你不能检查出来:这是一个类似蛇的鸟类游戏。你控制第一只鸟(通过绘制一条路径让它跟随/使用dpad),并且一群较小的鸟继续沿着它行。这些鸟是动画的,可以旋转180°和镜像(取决于它们飞过的位置)。

此刻我只动画第一只鸟,然后将其缩小并将其保存在4帧后显示的不可见元素(流体动画目的)中,而不是单独为每只鸟制作动画。因此,对于您在屏幕上看到的每只鸟,都有4个带有位图的对象。现在我的问题是,我应该制作一个Spritesheet并减少可能的旋转次数(例如,每10°一组精灵)或计算每只鸟的动画,还是保持它的方式?

+0

你测试了这个实现你说的? – woliveirajr

+0

我想开始制作更大的spritesheet,但是在意识到要花费大约10个小时才能正确完成,我停止了,现在我要尝试一下,但是没有。 – SBoss

回答

1

手动旋转精灵表没有意义,我只是加载一个精灵表。然后为每个角度制作一个Bitmaps阵列,并旋转并复制每个角度的基础精灵片。 (您可能需要一组数组来处理动画,或者对精灵表的每一帧进行单独旋转)。这也让您可以轻松地更改自己的作品。

类似:

Bitmap baseFrame; 
Bitmap rotatedFrame[]=new Bitmap[360/10]; 

... 

Matrix rotationMatrix=new Matrix(); 
rotationMatrix.setRotate(n*10); 
rotatedFrame[n]=Bitmap.createBitmap(baseFrame,0,0, 
            baseFrame.getWidth(), baseFrame.getHeight(), 
            rotationMatrix, false); 

的宽度和旋转图像的高度可能需要更大然后基本影像,你可能希望你将它设置为围绕中心旋转,但你得到的想法

顺便说一句,

在看看你的游戏截图我怀疑绘制你的背景可能有较大的影响,然后旋转鸟。您可能想要分析您的代码,以查看绘制每幅图像需要多长时间。 (http://developer.android.com/guide/developing/debugging/debugging-tracing.html)。我会确保你的背景以RGB_565格式加载,在用软件渲染时可以快很多。

我发现Android中的旋转图像的速度惊人地快,能够以良好的帧速率旋转数百个小的位图。

+0

我不想使用太多的图片,看到我的应用程序在某些设备上已经可以获得OOME,尽管这应该几乎是不可能的。但我想尝试一下。你知道如何旋转spritesheet中的单个精灵而不旋转spritesheet的大小/宽度吗?感谢RGB_565,我会研究这一点。 – SBoss

+0

@SBoss您可以尝试创建一个新的画布,然后使用canvas.setBitmap和canvas.rotate将旋转的图像绘制到您的精灵表上。如果你愿意,你可以使用这个方法来构建一个大的精灵表。 – LukePH

+0

对不起,迟到的回应..我有一些很好的美味假期:) 所以:你如何旋转的精灵奇异,就像你旋转整个spritesheet你不能切出适当的精灵不旋转到你的坐标会有点失败的目的。 – SBoss