我试图通过使两个位图分开滑动来过渡到游戏中,就像一个车库门从中间打开,一半向下和向上一半滑动。无论如何,当我这样做时,它看起来确实很断断续续,并且帧频似乎不稳定/不可靠。这就是我的做法。

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是否有帮助?

最佳答案

我有同样的问题。我知道您所说的“波涛汹涌”是什么意思。即使您有基于时间的动画,即您正在使用动画,动画速度也不一致

SystemClock.currentThreadTimeMillis()


断断续续是由currentThreadTimeMillis()引起的。它“返回在当前线程中运行的毫秒数”。也就是说,当您使用currentThreadTimeMillis()时,“时间”仅在当前线程为RUNNING时经过。但是渲染器线程始终不会运行-正如您在多任务环境中所期望的那样。因此,每次线程未运行时,动画也不会“运行”(时间没有流逝)。

解决方案:使用

SystemClock.elapsedRealtime()

09-10 07:03