Хорошо, я пытался плавно переходить на 2D чистый андроид без игрового движка уже неделю. Я использую ScheduledThreadPoolExecutor
прямо сейчас.
Итак, у меня есть переменная с именем FPS. Сколько раз персонаж должен подняться, прежде чем достигнет значения 180 Y;
Примечание: FPS
на самом деле не является количеством кадров в секунду во всей игре.
Когда для FPS
установлено значение 45, приложение никогда не зависает (Если я не буду повторно спамить кнопку перехода)
Но 90, СЛУЧАЙНЫЕ СЛУЧАИ, КОГДА Я ИГРАЮ В ИГРУ игра ЗАМЕРЗНУЕТ и logcat показывает:
E/WindowManager: Performed 6 layouts in a row. Skipping
Неважно, что я использую (например: Handler
Runnable
и Thread
), приложение
Вот код перехода:
public void jump() {
final ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
if(!isRunning) {
executor.scheduleWithFixedDelay(new Runnable() {
boolean moveUpBln = true;
int timesLooped = 0;
float FPS = 90; //Never freezes with value of 45 (or under)
float charMovementFPS = 180 / FPS;
@Override
public void run() {
if(moveUpBln) {
isRunning = true;
characterModel.setY(characterModel.getY() - charMovementFPS);
if (timesLooped == FPS || timesLooped > FPS) {
moveUpBln = false;
timesLooped = -1;
}
timesLooped++;
}else{
isRunning = true;
characterModel.setY(characterModel.getY() + charMovementFPS);
if (timesLooped == FPS || timesLooped > FPS) {
executor.shutdownNow();
isRunning = false;
}
timesLooped++;
}
}
}, 0, 3, TimeUnit.MILLISECONDS);
}
}
ПРИМЕЧАНИЕ: -1 не проблема, это преднамеренно
Что это за layouts
, о котором говорит logcat? Оказываю ли я слишком большое давление на мою игру, не связанную с движком?