SDL предоставляет мне эту структуру:
typedef struct SDL_Rect {
Sint16 x, y;
Uint16 w, h;
} SDL_Rect;
Я хочу создать новую SDL_Rect
в куче как переменную класса:
// Forward declaration
private:
SDL_Rect *m_pcScreenRect;
И в конструкторе я делаю это:
/* Screen Rectangle (for clearing) */
m_pcScreenRect = new SDL_Rect;
m_pcScreenRect->x = 0;
m_pcScreenRect->y = 0;
m_pcScreenRect->w = 800;
m_pcScreenRect->h = 600;
printf("Rect(x:%d, y:%d, w:%d, h:%d)\n", m_pcScreenRect->x, m_pcScreenRect->y, m_pcScreenRect->w, m_pcScreenRect->h);
Какие отпечатки Rect(x:0, y:0, w:800, h:600)
Так что это правильно.
Задача 1
Но когда я не инициализирую x
и y
, он печатает мусорные числа вроде:
Rect(x:-11280, y:63, w:800, h:600)
Rect(x:25584, y:167, w:800, h:600)
Rect(x:-11280, y:40, w:800, h:600)
// This is just, run, terminate, run, terminate, ....
И я думал, что значением по умолчанию для int является 0
?
Задача 2
В моем игровом цикле у меня есть та же строка, чтобы проверить значения SDL_Rect. В цикле я получаю следующие результаты:
Clear (x:0, y:40, w:0, h:560)
Clear (x:0, y:99, w:0, h:501)
Clear (x:0, y:55, w:0, h:545)
Clear (x:0, y:55, w:0, h:545)
// Again: run, terminate, run, terminate....
Когда мой конструктор выглядит так:
/* Screen Rectangle (for clearing) */
m_pcScreenRect = new SDL_Rect;
//m_pcScreenRect->x = 0;
//m_pcScreenRect->y = 0;
m_pcScreenRect->w = 800;
m_pcScreenRect->h = 600;
И я получаю нормальные результаты, когда раскомментирую две строки:
/* Screen Rectangle (for clearing) */
m_pcScreenRect = new SDL_Rect;
m_pcScreenRect->x = 0;
m_pcScreenRect->y = 0;
m_pcScreenRect->w = 800;
m_pcScreenRect->h = 600;
Имеет ли эта проблема какое-то отношение к new
или к типам данных (Uint16 и обычный int). Если это с типами данных, как решить это?
Спасибо, буду очень признателен! (Ха-ха!)
Спасибо
Любая помощь будет принята с благодарностью!
Дополнительный вопрос:
Я должен определить все свои переменные в C ++.
Но откуда взялись случайные числа?
Я использую g++
и gcc
в Linux.