2011-11-03 30 views
1

我试图通过让两个位图分开滑动来实现向我的游戏过渡,就像一个从中间开放的车库门,一半向下滑动半个向上。无论如何,当我这样做时,它看起来非常不稳定,帧率似乎不稳定/不可靠。这是我如何做的。图形筷子

public class TFView extends View{ 
... 
public void startlevel(Canvas c){ 
    long l =(SystemClock.currentThreadTimeMillis()-starttime)/3;//*(height/500); 
    if(l<1000){ 
     c.drawBitmap(metalbottom,0,height/2+l,p); 
     c.drawBitmap(metaltop,0,0-l,p);} 
    } 
public void endlevel(Canvas c){ 
    long l =(SystemClock.currentThreadTimeMillis()-failtime)/3; 
    if(l>=height/2){ 
     c.drawBitmap(metaltop, 0, 0, p); 
     c.drawBitmap(metalbottom, 0,height/2 , p); 
    } 
    else{ 
     c.drawBitmap(metalbottom,0,-height/2+l,p); 
    c.drawBitmap(metaltop,0,height-l,p);} 
}} 

我设定了我想分别打开/关闭门的时间。那么,你认为我应该改变什么才能使它更平滑的过渡?将它转换为surfaceview有帮助吗?

+0

是U试图在模拟器中还是真正的电话吗? – the100rabh

+0

我使用了我的手机和模拟器 – Derek

回答

2

我有同样的问题。我知道你的意思是“波涛汹涌”。动画速度并不一致,即使你有一个基于时间的动画,即使用的是

SystemClock.currentThreadTimeMillis() 

抖动现象是由currentThreadTimeMillis引起的()。它“返回当前线程中运行的毫秒数”。也就是说,当你使用currentThreadTimeMillis()时,只有在当前线程正在运行时才会消耗“时间”。但是您的渲染器线程并不总是运行 - 就像您在多任务环境中所期望的那样。因此,每次线程不运行时,动画也不会“运行”(时间不会过去)。

解决方案:使用

SystemClock.elapsedRealtime() 
0

我不得不承认,我不是最好的,当涉及Android的动画,但我想我会贡献。

从你的解释,你可以使用TranslateAnimation?您的动画将非常流畅。

据我所知,如果Android提供的动画不够用,应该在单独的线程中绘制图形,实现SurfaceView

This may help或看看Lunar Lander的例子。