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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Не может реализовать символ icon http://www.cyberforum.ru/android-dev/thread1152093.html
Здравствуйте. в строке 25 пишет не может реализовать символ icon, почему? package com.example.Test6; import android.app.Activity; import android.os.Bundle; import android.app.Notification;...
Программирование Android Исходники сервиса с сокет-клиентом Нужно написать подобное и не хочу писать все с нуля... Изобретать велосипед... Может подобное уже есть в опенсорсах? Нужно: 1) неубиваемый сервис в автозагрузку. 2) сокет с переконнектом на... http://www.cyberforum.ru/android-dev/thread1151994.html
Программирование Android Переходы по ссылка в фоновом режиме?
Здравствуйте. Как можно реализовать автоматический переход по ссылкам в WebView? Т.е. хочу сделать так, что бы в фоновом режиме у меня работало приложение и постоянно бродило по сайту. Можно ли...
OPC переменные и Android приложение Программирование Android
Доброго времени суток!!! У меня возник вопрос. Хочу написать приложения в котором смогу изменять значения opc перемененных. Буду рад если вы подскажите, как это сделать или поделитесь подобными...
Программирование Android Через что лучше всего реализовать Кликабельный TextView http://www.cyberforum.ru/android-dev/thread1151440.html
Доброго времени суток. Натолкните на мысль пожалуйста, через что лучше всего реализовать. Получаю список в файлов в папке, вывожу в обычный TextView. Требуется сделать, каждая запись в TextView...
Программирование Android Создание объектов-камикадзе Здравствуйте! Сразу к сути. Есть игра-шутер под андроид. Я против ботов. 2Д. Спрайтовая внимация. При попадании бота, его нужно удалить, а на его месте на "n" секунд позать какую-нибудь... подробнее

Показать сообщение отдельно
phpk
26 / 26 / 6
Регистрация: 15.05.2013
Сообщений: 1,069

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

20.04.2014, 14:03. Просмотров 914. Ответов 2
Метки (Все метки)

Обьясните пожалуйста часть кода игры Змейка, а именно меня интересует интервал, через который обновляется экран, и обьекты, расположенные на экране.
В классе 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 ?

Вроде обьяснил своё недопонимание. Т.е. меня интересует как вычисляется промежуток в пол секунды, на который замирает змейка, и по истечении которого змейка перемещается?
Обьясните пожалуйста подробней
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru