android 背景图太大,android – 背景图片需要太长时间才能画(Canvas)Jerky Sprites ……?...

嘿所有我正在处理我一直在努力的应用程序的十字路口.

这是一个游戏和一个“街机/动作”,但是我使用Surfaceview而不是Open GL对它进行编码(当游戏从原始设计中彻底改变时,它就是这样).

我发现自己困扰着性能问题甚至在游戏中,但只是在第一个活动中,这是一个动画菜单(全屏幕背景,大约8个精灵浮在屏幕上).

即使有这么少的精灵,我也无法获得完美平稳的动作.它们平稳地移动了一段时间,然后瞬间变得“波涛汹涌”或“生涩”.

我注意到(据我所知)背景(预先缩放的图像)需要大约7到8毫秒的时间来绘制.这合理吗?我尝试过不同的绘图方式,例如:

canvas.drawBitmap(scaledBackground, 0, 0, null);

上面的代码产生的结果大致相同:

canvas.drawBitmap(scaledBackground, null, screen, null);

但是,如果我将持有人改为:

getHolder().setFormat(PixelFormat.RGBA_8888);

位图的绘制最高可达13 MS(我假设因为它必须转换为RGB_8888格式.

奇怪的是渲染和逻辑以非常稳定的30fps移动,它不会丢弃任何帧,并且在运行时没有发生垃圾收集.

我已经尝试了几乎所有我能想到的东西让我的精灵顺利移动

我最近在我的游戏循环中加入了插值:

float interpolation = (float)(System.nanoTime() + skipTicks - nextGameTick)

/ (float)(skipTicks);

然后我将它传递给我的draw()方法:

onDraw(interpolate)

我已经取得了一些成功,它确实有助于解决问题,但我对结果仍然不满意.

任何人都可以给我任何最后的提示,可能会减少绘制我的位图所花费的时间或任何其他可能导致这种情况的提示,或者你认为这只是Surfaceview无法完成任务的情况因此,我应该废弃该应用程序原样并重新开始使用Open GL?

这是我的主要游戏循环:

int TICKS_PER_SECOND = 30;

int SKIP_TICKS = 1000 / TICKS_PER_SECOND;

int MAX_FRAMESKIP = 10;

long next_game_tick = GetTickCount();

int loops;

bool game_is_running = true;

while( game_is_running ) {

loops = 0;

while( GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP) {

update_game();

next_game_tick += SKIP_TICKS;

loops++;

}

interpolation = float( GetTickCount() + SKIP_TICKS - next_game_tick )

/ float( SKIP_TICKS );

display_game( interpolation );

}

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值