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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
phpk
26 / 26 / 6
Регистрация: 15.05.2013
Сообщений: 1,068
#1

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

20.04.2014, 14:03. Просмотров 886. Ответов 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 ?

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

Нужна маленькая подсказка с калькулятором - Программирование Android
Всем привет, я новичок. Практикуюсь с калькулятором. В общем: 2 поля А и Б и третье с выводом ответа. чтоб только цифры вводились...

Обновление экрана - Программирование Android
В стандартных функциях есть возможность посмотреть, как обновляется экран. Было бы классно это использовать в коде (нужно выполнять...

Обновление содержимого экрана - Программирование Android
Добрый день! На экране расположены элементы TextView. Я программно меняю их содержимое и должна отобразить, после чего процесс...

Всплывающая подсказка (ToolTip) выходит за пределы экрана - C#
Я перерисовал ToolTip, и возникла такая проблема: эта подсказка выходит за пределы экрана. Как можно решить эту проблему?

Нужна подсказка - PHP ООП
Есть готовый мини-проект, сделайнный с патерном MVC, может ли кто-нибудь просмотреть и безжалостно сказать о недочетах? Если есть...

Нужна подсказка - Turbo Pascal
Паскаль, 9 класс. позор мне :( Итак, собственно, вопрос 1) Дано следующее : Type Tablou = array of integer; Var x, y :...

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

Добавлено через 1 минуту
в инете много всего про это написано, но именно про интервал что-то нет
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
22.04.2014, 16:13 #3
phpk, на сколько я знаю, интервала не существует.
То есть, грубо говоря (очень грубо говоря и очень примитивно), перерисовка игры работает так:
Java
1
while (true) draw(this);
все-время и без остановки. А в самом draw уже считают сколько кадров было нарисовано в секунду.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 16:13
Привет! Вот еще темы с ответами:

While(i<=n) b[i]=a[i] i++. Нужна подсказка( - C++
char b; char* e={&quot;bin&quot;,&quot;txt&quot;}; int i=0; while(i&lt;=2) { b=e; i++; } cout&lt;&lt;b; На выходе...

Нужна подсказка - C++
Обьясните пожалуйста что не так. При компилирование выводит &quot;&quot;Vam bilshe nizh sto rokiv&quot;&quot; ...

Нужна подсказка - Delphi
дана действительная матрица размера n x m, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением,...

Нужна подсказка - HTML, CSS
Я начинающий программист,вот изучил я HTML,и у меня вопрос что нужно изучить следующим?


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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