我试图通过让两个位图滑开来试图转换到我的游戏,就像一个车库门从中间开口,一半向下滑动,一半向上滑动。无论如何,当我这样做时,它看起来非常不稳定,帧速率似乎不稳定/不可靠。我就是这样做的。
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 :(得分:2)
我遇到了同样的问题。我知道你的意思是“波涛汹涌”。即使您有基于时间的动画,即使用
,动画速度也不一致SystemClock.currentThreadTimeMillis()
波动是由currentThreadTimeMillis()引起的。它“返回在当前线程中运行的毫秒数”。也就是说,当您使用currentThreadTimeMillis()时,“time”仅在当前线程正在运行时过去。但是您的渲染器线程并不总是在运行 - 正如您在多任务环境中所期望的那样。因此,每次线程未运行时,动画也不会“正在运行”(时间不会过去)。
解决方案:使用
SystemClock.elapsedRealtime()
答案 1 :(得分:0)
我不得不承认我在Android中的动画方面并不是最好的,但我认为我会做出贡献。
根据您的解释,您可以使用TranslateAnimation吗?那么你的动画会非常流畅。
据我所知,如果Android提供的动画不够,你应该在一个单独的线程中绘制图形,实现SurfaceView。
This may help或者查看Lunar Lander示例。