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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
#1

Неправильно работает таймер SDL_AddTimer - C++

28.10.2013, 11:14. Просмотров 472. Ответов 5
Метки нет (Все метки)

Бобры появляются каждые 2 секунды.
Через 6 секунд срабатывает таймер и они появляются в 2 раза быстрее.
Если все жизни вышли, таймер должен удаляться, а время отображения становиться опять 2 секунды.
Но почему-то если сыграть одну игру, проиграть, нажать play, бобры сразу появляются с большой скоростью.

// SceneElements.h
C++
1
2
3
4
class SceneElements {
    double& getTimeToDisplayBeaverInSeconds()
    { return timeToDisplayBeaverInSeconds; } // По умолчанию 2
};
// SceneElements.cpp
C++
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
Uint32 callback(Uint32 interval, void *param) {
    SceneElements* p = (SceneElements*)param;
 
        // Уменьшение времени отображения бобров в 2 раза
    p -> setTimeToDisplayBeaverInSeconds(
        p -> getTimeToDisplayBeaverInSeconds() /= 2;
    return interval;
}
 
void SceneElements::scene_2_events() {
    // Запуск таймера. 6000 - время (мс), через которое вызовется callback()
    SDL_TimerID timer_id = SDL_AddTimer(6000, callback, this);
 
    // Некоторый код
 
    if ( /* Если жизней ноль */ ) {
    SDL_RemoveTimer(timer_id);  // Удаление таймера
 
        // Время отображения бобров устанавливается в 2 секунды
    timeToDisplayBeaverInSeconds = MAX_TIME_TO_DISPLAY_BEAVER;  
 
        // Количество жизней устанавливаем в максимум
    pDrawScene -> setLivesOfPlayerToMax();
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2013, 11:14     Неправильно работает таймер SDL_AddTimer
Посмотрите здесь:

Таймер не работает в Turbo C++ - C++
Реализовал таймер в Visual C++. #include "stdafx.h" #include <iostream.h> #include <conio.h> #include <time.h> #include...

Неправильно работает наследование - C++
1) Программа рисует параллельные линии, отстоящие друг от друга на случайный интервал (см. рисунок в приложении). 2) Каждая линия...

Неправильно работает функция - C++
void FreeTop( Tree *&tree ) { if( tree->d == NULL )delete tree; else FreeTop( tree->d ); } это моя функция освобождения...

неправильно работает программа на с++. - C++
вычислить произведение и число отрицательных элементов матрицы А,находящихся под главной диагональю. #include <vcl.h> #pragma...

Неправильно работает функция - C++
Проблема заключается в том, что в случае, если пользователь вводит числа от 1 до 9 все работает правильно, а если от 10 и далее, то...

Неправильно работает код - C++
Вот ссылка на код #include <iostream> #include <cmath> using namespace std; int main() { cout<<"Введите число "<<endl; int...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
шКодер самоучка
1813 / 1614 / 588
Регистрация: 09.10.2013
Сообщений: 3,618
Записей в блоге: 6
Завершенные тесты: 2
28.10.2013, 11:30     Неправильно работает таймер SDL_AddTimer #2
Таймер на время паузы надо останавливать или ввести переменную флаг идет игра или нет
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
28.10.2013, 11:38  [ТС]     Неправильно работает таймер SDL_AddTimer #3
Цитата Сообщение от Cra3y Посмотреть сообщение
Таймер на время паузы надо останавливать или ввести переменную флаг идет игра или нет
Да, но этот баг есть, даже если не использовать паузу
Max Dark
шКодер самоучка
1813 / 1614 / 588
Регистрация: 09.10.2013
Сообщений: 3,618
Записей в блоге: 6
Завершенные тесты: 2
28.10.2013, 13:11     Неправильно работает таймер SDL_AddTimer #4
В общем у вас за проход цикла таймер создается минимум три раза, а уничтожается только 1 раз
Надо учитывать что каждый вызов SDL_AddTimer сщздает новый таймер, а не заменяет предыдущий
Max Dark
шКодер самоучка
1813 / 1614 / 588
Регистрация: 09.10.2013
Сообщений: 3,618
Записей в блоге: 6
Завершенные тесты: 2
28.10.2013, 13:49     Неправильно работает таймер SDL_AddTimer #5
Набросал класс оболочку для SDL-таймера
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class SDLTimer {
private:
    SDL_TimerID m_id;
public:
    SDLTimer(): m_id(NULL) {}
    bool start(Uint32 interval,
            SDL_NewTimerCallback proc,
            void* param) {
        if(m_id == NULL)
            m_id = SDL_AddTimer(interval, proc, param);
        return m_id!=NULL;
    }
    void stop() {
        if(m_id != NULL)
            SDL_RemoveTimer(m_id);
        m_id = NULL;
    }
    ~SDLTimer() {
        stop();
    }
};
в аттаче изменения с использованием этого класса
changes.7z
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2013, 16:14     Неправильно работает таймер SDL_AddTimer
Еще ссылки по теме:

программа работает неправильно - C++
Дана символьная матрица размера 13 на 18. Найти: номер первой по порядку строки, содержащий наибольшее число цифр; #include...

Неправильно работает функция - C++
Господа, написал следующий код, цель - заполнить имеющийся вектор структур данными из файла + вывести количество символа @ Проблема...

Условие работает неправильно - C++
string getNumberEmployeeEtype(string x, int temp){ /*первым аргументом является строка должности сотрудника, вторым - номер сотрудника*/ ...

Неправильно работает меню - C++
Вечер добрый! Собственно вопрос: я что-то напутал и теперь меню отказывается нормально работать и выдает min и затем сразу max, не могли бы...

Неправильно работает функция - C++
You are given natural number n. Calculate 12+22+...+n2. Example Input Output 2 5 Добавлено через 1 минуту #include <iostream>...

Прога работает неправильно - C++
Например вводим 123 45 new_str_ed=new_str_cop; ch=getchar();//здесь почему то просит ввести символы if (ch==32)//во входном потоке...


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

Или воспользуйтесь поиском по форуму:
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
28.10.2013, 16:14  [ТС]     Неправильно работает таймер SDL_AddTimer #6
Работает, супер, спасибо
Yandex
Объявления
28.10.2013, 16:14     Неправильно работает таймер SDL_AddTimer
Ответ Создать тему
Опции темы

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