准备资料:

  1. frameworks/base/libs/surfaceflinger/tests/resize/resize.cpp
  2. http://people.debian.org.tw/~olv/surfaceflinger/demo.tar.gz
  3. http://android.git.kernel.org/?p=platform/frameworks/base.git;a=tree;f=libs/surfaceflinger;h=686841e18fcbb5ec6b07b9bf84f8555db92e546f;hb=master

之所以要研究SurfaceFlinger,是因为yap在移植过程中,动画速度很慢,无法和pc上效果相比;导致这种状况的原因有两个:

  1. SDL_Flip较慢,平均花费要130ms,而pc上仅需15ms
  2. zoomSurfaceV2较慢,平均也要130ms,而pc上仅需1ms

第一个原因可能和目前pelya提供的SDLonAndroid有关,但第2点却与之无关。

如果要解决yap on Android的问题,那么就需要解决上述两问题,第1个问题需要SurfaceFlinger的背景知识,

第2个问题可以有两种解法,

  • 其一可以将factor调为1.0,如此yap就不做zoom动作,但这条路需要修改bmp,将之扩充至支持640×480,且要修改代码来支持640×480
    当前代码和分辨率320×240绑定
  • 其二就是改进zoomSurfaceV2的zoom算法,具体怎么做还没想好

注:后来发现其实还有一种方法,动画速度慢其实还与一个因素有关系,就是移动的速度,如果能加快sprite的移动速度,也能部分解决这个问题。

Advertisements