2012-06-06 3 views
2

Я попытаюсь объяснить, что я имею в виду. Я разрабатываю 2d-игру. Когда я запускаю код ниже на маленьком экране, он работает быстрее, чем тот же код на большом экране. Я думаю, что это зависит от итерации игрового цикла, занимает больше времени на большом экране, чем на маленьком. Как я могу реализовать time unit или что-то еще для него не зависит от итерации игрового цикла?Android в режиме реального времени - реализовать единицу времени

private void createDebris(){ 
    if(dx<=0) return; 
    if(stepDebris==2){   
     Debris debris = new Debris(gameActivity, dx-=1280*coefX/77, 800*coefY-50*coefY, coefX, coefY); 
     synchronized (necessaryObjects) { 
      necessaryObjects.add(debris); 
     } 
     stepDebris=-1; 
     Log.e("COUNT", (count++)+""); 
    } 
    stepDebris++; 
} 

P.S. Обломки - это визуальный объект, который нарисован на холсте. Буду признателен за ваши ответы. Благодарю.

+0

Хорошая ссылка на это: http://www.koonsolo.com/news/dewitters-gameloop/ –

ответ

0

Вы можете сделать «итерацию» за миллисекунды, измерив время, необходимое для фактической итерации (= y), а затем спящего (x-y) миллисекунды.

Смотрите также step 3 of this tutorial

+0

Не было бы почти невозможно - если вы обновляете игровой мир с динамически меняющимся количеством объектов ? – Ani

+0

Спасибо за ссылку. Я посмотрю. Если я найду что-то, что поможет мне, я проверю ваш ответ. – Nolesh

1

Если, stepDebris - это единица, с помощью которой вы перемещаете объекты на экране, то приращение его на призыв за ничью неверно, поскольку оно связывает скорость движения с частотой кадров.

То, что вы хотите что-то вроде этого

stepDebris += elapsedMilliseconds * speedFactor 

где elapsedMilliseconds это время, прошедшее с момента начала игры (в мСм). Как только вы найдете правильный speedFactor для stepDebris - он будет двигаться с одинаковой скоростью на разных машинах/разрешениях независимо от частоты кадров.

Надеюсь, это поможет!

0

Android provies в API Handler, который реализует синхронизированные циклы событий, чтобы контролировать время вычисления. This article довольно хорошо.

Вы сэкономите время автономной работы, внедряя контроллер частоты кадров с этим интерфейсом, а также перерисовывайте его как можно быстрее.

Смежные вопросы