Форум программистов, компьютерный форум CyberForum.ru

Обновление экрана игры, нужна подсказка - Android

Восстановить пароль Регистрация
 
phpk
25 / 25 / 6
Регистрация: 15.05.2013
Сообщений: 1,005
20.04.2014, 14:03     Обновление экрана игры, нужна подсказка #1
Обьясните пожалуйста часть кода игры Змейка, а именно меня интересует интервал, через который обновляется экран, и обьекты, расположенные на экране.
В классе AndroidFastRenderView вычисляется deltaTime в строке 21, и это значение передаётся игре для обновления
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class AndroidFastRenderView extends SurfaceView implements Runnable {
    AndroidGame game;
    Bitmap framebuffer;
    Thread renderThread = null;
    SurfaceHolder holder;
    volatile boolean running = false;
    
    public AndroidFastRenderView(AndroidGame game, Bitmap framebuffer) {
        super(game);
        this.game = game;
        this.framebuffer = framebuffer;
        this.holder = getHolder();
    }
    public void run() {
        Rect dstRect = new Rect();
        long startTime = System.nanoTime();
        while(running) {  
            if(!holder.getSurface().isValid())
                continue;           
            
            float deltaTime = (System.nanoTime()-startTime) / 1000000000.0f;
            startTime = System.nanoTime();
 
            game.getCurrentScreen().update(deltaTime);
            game.getCurrentScreen().present(deltaTime);
            
            Canvas canvas = holder.lockCanvas();
            canvas.getClipBounds(dstRect);
            canvas.drawBitmap(framebuffer, null, dstRect, null);                           
            holder.unlockCanvasAndPost(canvas);
        }
    }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class World {
    static final int WORLD_WIDTH = 10;
    static final int WORLD_HEIGHT = 13;
    static final int SCORE_INCREMENT = 10;
    static final float TICK_INITIAL = 0.5f;
    static final float TICK_DECREMENT = 0.05f;
 
    public Snake snake;
    public Stain stain;
    public boolean gameOver = false;;
    public int score = 0;
 
    boolean fields[][] = new boolean[WORLD_WIDTH][WORLD_HEIGHT];
    Random random = new Random();
    float tickTime = 0;
    static float tick = TICK_INITIAL;
... 
 
    public void update(float deltaTime) {
        if (gameOver)
            return;
 
        tickTime += deltaTime;
 
        while (tickTime > tick) {
            tickTime -= tick;
            snake.advance();
            if (snake.checkBitten()) {
                gameOver = true;
                return;
            }
...
а в классе World в строке 5-й (TICK_INITIAL = 0.5f) задаётся интервал пол секунды, через который змейка перемещается, и когда змейка сьест 10 порций еды, то время обновления уменьшается на TICK_DECREMENT = 0.05f в 6-й строке.
Так вот меня интересует код в классе World, в строках 19 - 26.
Это выражение float deltaTime = (System.nanoTime()-startTime) / 1000000000.0f; вернёт примерно 0,020384.
В World, в строке 23 это значение прибавляется к tickTime. А в строке 25 (while (tickTime > tick) {) указывается условие, что tickTime больше tick. Как число 0,020384 может быть больше 0,5f ?

Вроде обьяснил своё недопонимание. Т.е. меня интересует как вычисляется промежуток в пол секунды, на который замирает змейка, и по истечении которого змейка перемещается?
Обьясните пожалуйста подробней
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 14:03     Обновление экрана игры, нужна подсказка
Посмотрите здесь:

Требуется подсказка в написании Cудоку Android
Поворот Экрана Android
Нужна маленькая подсказка с калькулятором Android
Android Скриншот экрана
Android Обновление экрана
Android Скрывается подсказка "hint" под курсором
Включение экрана Android
Разрешение экрана Android
Android Блокировка экрана
ориентация экрана Android
Android Обновление содержимого экрана
Android Размеры экрана

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
phpk
25 / 25 / 6
Регистрация: 15.05.2013
Сообщений: 1,005
21.04.2014, 18:25  [ТС]     Обновление экрана игры, нужна подсказка #2
дайте хоть самый простой пример с surfaceview и с потоком, без всяких лишностей.
Допустим перемещение любого обьекта с одного края экрана в другой с определённым интервалом времени.
Как правильно задавать интервал?

Добавлено через 1 минуту
в инете много всего про это написано, но именно про интервал что-то нет
646kapeh064
 Аватар для 646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 208
22.04.2014, 16:13     Обновление экрана игры, нужна подсказка #3
phpk, на сколько я знаю, интервала не существует.
То есть, грубо говоря (очень грубо говоря и очень примитивно), перерисовка игры работает так:
Java
1
while (true) draw(this);
все-время и без остановки. А в самом draw уже считают сколько кадров было нарисовано в секунду.
Yandex
Объявления
22.04.2014, 16:13     Обновление экрана игры, нужна подсказка
Ответ Создать тему
Опции темы

Текущее время: 15:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru