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

Фикс скорости Игры - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Описать абстрактный класс для операции http://www.cyberforum.ru/cpp-beginners/thread727343.html
Опишите абстрактный класс объектов, для которых определены операции ==, =, !=. Операцию == определите полностью для случая, когда объекты являются строками символов. Покажите на примере хотя бы...
C++ Определить класс с именем STUDENT 1. Определить класс с именем STUDENT, содержащий следующие поля: а) Фамилия и инициалы; б) Номер группы; в) Успеваемость (массив из пяти элементов). Определить методы доступа к этим полям и... http://www.cyberforum.ru/cpp-beginners/thread727342.html
C++ вычисление в математических задачах
Найти площадь треугольника, две стороны которого равны a и b , а угол между этими сторонами γ
Обработка последовательностей (Если набор образует убывающую посл-ть, вывести 0...) C++
Дано целое число N и набор из N вещественных чисел. Если данный набор образует убывающую последовательность, то вывести 0; в противном случае вывести номер первого числа, нарушающего закономерность.
C++ Найти первый из номеров K, для которых выполняется условие... http://www.cyberforum.ru/cpp-beginners/thread727299.html
Дано число D (> 0). Последовательность чисел AN определяется следующим образом: A1 = 2, AN = 2 + 1/AN–1, N = 2, 3, ... Найти первый из номеров K, для которых выполняется условие |AK – AK–1| < D, и...
C++ Развлечения с массивом через указатель Инициализация указателей. Объявите массив, состоящий из 8 элементов типа short int. Объявите указатель на этот массив и присвойте ему адрес начала массива. Выведите адрес на экран. Присвойте... подробнее

Показать сообщение отдельно
Refery
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 16

Фикс скорости Игры - C++

11.12.2012, 12:40. Просмотров 372. Ответов 3
Метки (Все метки)

Здравствуйте ув. программеры.

Очень прошу помочь с подключением таймера для фиксирования скорости передвижения объектов в игре (пишу с помощью openGL.
т.к. в зависимости от мощности компа скорость поворота (допустим космического кораблика) будет разной на разных компах. Слышал что это как-то можно исправить с мопощью отслеживания прошедшего времени с момента нажатия на клавишу управления.
Например при зажатии клавиши для поворота на 500 миллисекунд объект (кораблик) должен повернуться на 180 градусов. и соответственно при 250 мс на 90, и т.п.

привожу задействованные в данном процессе отрывки кода:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <cstring>
#include <windows.h>        // Заголовочный файл для Windows
#include <stdio.h>          // Заголовочный файл для стандартного ввода/вывода
#include <stdlib.h>
#include <glut.h>           // Заголовочный файл для библиотеки OpenGL32
#include <glaux.h>          // Заголовочный файл для библиотеки GLaux
#include <math.h> 
#include "SOIL.h"               //библиотека для загрузки png  как текстуры в openGL с альфа каналом.
 
...................................................
 
enum {left, right, up, probel, one, two, three, four, five, six};   //for ship contol
 
class CSpace
{
    GLfloat zRot,               //поворот кораблика стрелками
........................................
public:
........................................
    GLvoid control(GLint button)
    {
        switch (button)
        {
        case left:                      // <------вот ЗДЕСЬ хотелось бы пофиксить с помощью таймера
            zRot+=2.5f;                 //поворот влево
            if(zRot>=360.0f) zRot -= 360.0f;    //сброс угла
            if(zRot<0.0f) zRot += 360.0f;       //сброс угла
            break;
        case right: 
            zRot-=2.5f;      
            if(zRot>=360.0f) zRot -= 360.0f;
            if(zRot<0.0f) zRot += 360.0f; 
            break;
        default:
            break;
        }
    }
};
 
GLvoid StartGameSettings()          //for crate objects
{
    Shuttle.SetPosition(ship);
}
 
 
int WINAPI WinMain(  ............... )        // Состояние отображения окна
{
StartGameSettings();
.................................
while( !done )                // Цикл продолжается, пока done не равно true
    {
        done = true;          
                if(keys[VK_ESCAPE])        // Было ли нажата клавиша ESC?
                {
                    done = true;      // ESC говорит об останове выполнения программы
                }
                DrawGLScene();        // Рисуем сцену
                SwapBuffers( hDC );    // Меняем буфер (двойная буферизация)
 
                /* from here place will start description for keyboard  */
 
                if (keys[VK_LEFT])     // если нажата клавиша стрелка влевао, то...
                {
                    Shuttle.control(left);
                }
                if (keys[VK_RIGHT])     
                {
                    Shuttle.control(right);
                }
.................................................................................
                
            }
        }
    }
    return ( msg.wParam );              // Выходим из программы
}
Буду благодарен, если покажите пример на основе моего кода.
Желательно как можно подробней, и понадобятся ли какие нибудь дополнительные заголовочные файлы?
Заранее спасибо!

Добавлено через 1 минуту
типы GLfloat = float
GLint = int
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru