Я делаю игру в Android Studio. Теперь моя игра завершена, но скорость игры на больших экранах другая...
Я запускаю свою игру с этим таймером:
if (timer == null){
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (start_flg) {
handler.post(new Runnable() {
@Override
public void run() {
changePos();
}
});
}
}
}, 0, 20);
}
changePos() выглядит так:
public void changePos() {
SPEED_BOX =(screenHeight/280);
long time = System.nanoTime();
double delta_time = (double) ((time - last_time) / 1000000)/10;
last_time = time;
// Move Box
if (action_flg) {
// Touching
boxY += SPEED_BOX*delta_time;
box.setImageDrawable(imageBox1);
} else {
// Releasing
boxY -= SPEED_BOX*delta_time;
box.setImageDrawable(imageBox2);
}
// Check box position.
if (boxY < 0) {
boxY = 0;
box.setImageDrawable(imageBox1);
}
if (frameWidth - boxSize < boxY) {
boxY = frameWidth - boxSize;
box.setImageDrawable(imageBox2);
}
box.setY(boxY);
}
правильно ли я понимаю, что мой deltaTime всегда находится в диапазоне от 1,5 до 2,9?
но каждый раз пробую по разному всегда скорость игры не правильная. Можно ли сделать так, чтобы моя игра работала с одинаковой скоростью на разных устройствах с разными размерами экрана?
На мой взгляд, логика кажется правильной, если screenHeight
в пикселях. Имейте в виду, что Таймер может не запуститься через 20 мс. Это самое раннее возможное время, когда changePos()
можно было вызвать.
Да есть ящик и этот ящик движется вниз, но на каждом устройстве эта скорость разная
Что такое screenHeight
? Это пиксели?
да, это пиксели WindowManager windowManager = getWindowManager();
` Display display = windowManager.getDefaultDisplay();` Point size = new Point();
display.getSize(size);
screenWidth = size.x;
screenHeight = size.y;
Насколько велика разница в скорости? Может ли это быть вызвано ошибкой округления? Например, SPEED_BOX =(screenHeight/280);
вернет int, которого может быть недостаточно.
Разница в скорости составляет около полсекунды между большим 10-дюймовым планшетом и маленьким 5,5-дюймовым мобильным телефоном, SPEEDBOX вдвое; в логе у него есть значение например: speed: 6.4071428571428575
действительно правильно, как я вычисляю deltaTime и как я его использую?
Давайте продолжим обсуждение в чате.
Проблема заключалась в том, что screenHeight
была высотой экрана в пикселях, но игра не использует весь экран. Это привело к тому, что скорость была разной на разных устройствах. Поэтому screenHeight следует изменить на gamesLayout.getHeight()
.
Можете ли вы определить, что означает скорость игры? Я правильно понимаю, что на экране есть коробка, и эта коробка движется вниз? Вы хотите, чтобы коробка падала с верхней части экрана на нижнюю часть экрана в определенное фиксированное время,