Вопрос

Это проблема SDL, однако у меня есть сильное ощущение, что проблема, которую я столкнулся, не связана с SDL, но и более C ++ / указателям в целом.

Чтобы сделать длинную историю, этот код не работает (отредактировано, чтобы показать, что я В самом деле сделал):

player->picture = IMG_Load("player");
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation);

Я ничего не вижу на экране. Однако, когда я делаю это, это работает:

SDL_Surface* picture = IMG_Load("player.png");
player->picture = picture;
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation);

Я вижу маленького парня просто в порядке.

Настоящая проблема заключается в том, что я не могу создать экземпляр игрока :: Изображение напрямую. Даже когда я пытаюсь

picture = IMG_Load("player.png")

в Player.cpp, я в конечном итоге с NullPointer.

Это было полезно?

Решение

Я такой глупый. Оказывается, что я забыл расширение файла ".png" каждый раз, когда я пытался сохранить поверхность в игроке :: Изображение, и удобно запомнить, чтобы добавить его каждый раз, когда я устал его в SDL_Surface, объявленном в Main.cpp.

У меня было чувство, что я с видом на что-то В самом деле Простые здесь, но это просто смущение. Что подходит для этого наказание?

Другие советы

Какой тип данных является игрок-> изображение? Какой тип img_load return? Очень трудно придумать сценарий, где сохранение выражения во временной переменной изменениях изменяет результат, если только преобразование типа не участвует.

И я бы не назвал эту инсультирование указателя. Вы создаете экземпляр некоторого типа изображения и хранить на него указателя.

Вот почему вы всегда должны проверять, чтобы увидеть, что возвращает img_load () ...

SDL_Surface* picture = IMG_Load("player.png");
if (picture == NULL) {
  // there was obviously some sort of error.
  // what does SDL_GetError() say?
}

Некоторые функции SDL возвращают -1, если есть ошибка. Просто проверьте документацию и убедитесь, что вы проверяете свою функцию возврата. Эти шаги делают отладку намного проще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top