Графика изменчивая - PullRequest
       7

Графика изменчивая

1 голос
/ 03 ноября 2011

Я пытался перейти в свою игру, раздвинув два растровых изображения, как будто дверь гаража открывалась из середины, а половина скользила вниз, а половина вверх. Во всяком случае, когда я делаю это, это выглядит очень изменчиво, а частота кадров кажется нестабильной / ненадежной. Вот как я это делаю.

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?

Ответы [ 2 ]

2 голосов
/ 14 июля 2012

У меня была такая же проблема.Я знаю, что вы имеете в виду под "изменчивым".Скорость анимации НЕ постоянна, даже если у вас есть анимация на основе времени, т.е. вы используете

SystemClock.currentThreadTimeMillis()

Неустойчивость вызвана currentThreadTimeMillis ().Возвращает миллисекунды, запущенные в текущем потоке.То есть, когда вы используете currentThreadTimeMillis (), «время» истекает только тогда, когда текущий поток работает.Но ваш поток визуализации НЕ ВСЕГДА работает - как и следовало ожидать в многозадачной среде.Таким образом, каждый раз, когда поток не запускается, ваша анимация также не «работает» (время не истекло).

Решение: Используйте

SystemClock.elapsedRealtime()
0 голосов
/ 03 ноября 2011

Я должен признать, что я не самый лучший, когда дело доходит до анимации в Android, но я решил внести свой вклад.

Из вашего объяснения, вы могли бы использовать TranslateAnimation ?Тогда ваша анимация будет очень плавной.

Насколько я знаю, если анимации, предоставляемой Android, недостаточно, вы должны рисовать графику в отдельном потоке, реализуя SurfaceView .

Это может помочь или взглянуть на пример Lunar Lander .

...