1

这是一个 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);

我看小家伙就好了。

真正的问题是我不能直接实例化 Player::picture。即使我尝试

picture = IMG_Load("player.png")

在 player.cpp 中,我最终得到一个空指针。

4

3 回答 3

3

我太傻了。结果就像我每次尝试将表面存储在 Player::picture 中时都忘记了文件扩展名“.png”,并且每次我在 main.cpp 中声明的 SDL_Surface 中搅拌它时方便地记得添加它。

我觉得我在这里忽略了一些非常简单的东西,但这只是令人尴尬。什么是适当的惩罚?

于 2010-03-05T06:00:38.253 回答
0

这就是为什么您应该始终检查 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。只需检查文档并确保您正在检查您的函数返回。这些步骤使调试变得容易得多。

于 2010-03-05T19:17:25.823 回答
0

player->picture 是什么数据类型?IMG_Load 返回什么类型?除非涉及类型转换,否则很难想出将表达式保存在临时变量中会更改结果的场景。

我不会称这个指针实例化。您正在实例化某种图片类型的实例并存储指向它的指针。

于 2010-03-05T05:43:44.983 回答