【问题标题】:Animating with rotation旋转动画
【发布时间】:2011-07-25 11:30:02
【问题描述】:

我正在编写一个游戏,现在我开始意识到必须提高性能 (link to game (market))。

如果您看不出来:这是一场与鸟类的蛇类游戏。您控制第一只鸟(通过绘制一条路径让它跟随/使用 dpad),一群较小的鸟沿着它排成一行。这些鸟是动画的,可以旋转 180° 和镜像(取决于它们飞过的地方)。

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

【问题讨论】:

  • 你测试过你说的这个实现吗?
  • 我想启动更大的 spritesheet,但在意识到它需要大约 10 个小时才能正确完成后停止了,我现在要尝试,但没有。

标签: android animation bitmap rotation image-rotation


【解决方案1】:

手动制作旋转的精灵表是没有意义的,我只会加载一个单独的精灵表。然后为每个角度制作一个位图数组,并在每个角度上旋转和复制基本精灵表。 (您可能需要一个数组数组来处理动画,或者对精灵表的每一帧进行单独的旋转)这也让您以后可以轻松地更改您的艺术。

类似:

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 中旋转图像的速度非常快,能够以良好的帧速率旋转数百个小位图。

【讨论】:

  • 我不希望使用太多图像,看看我的应用程序如何在某些设备上获得 OOME,尽管这几乎是不可能的。不过我想试一试。你知道如何在不旋转精灵表的大小/宽度的情况下旋转精灵表中的单个精灵吗?感谢 RGB_565,我会调查的。
  • @SBoss 你可以尝试创建一个新的画布,然后使用 canvas.setBitmap 和 canvas.rotate 将旋转的图像绘制到你的精灵表上。如果需要,您可以使用此方法在每次旋转时构建一个大精灵表。
  • 抱歉回复晚了.. 我度过了一些愉快的假期 :) 所以:你如何单独旋转精灵,就好像你旋转整个精灵表一样,如果没有你就不能剪出合适的精灵将旋转应用于您的坐标,这会破坏目的。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2011-05-20
    • 2013-05-22
    • 2018-11-25
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多