这是一个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中,我最终得到了一个nullpointer。
答案 0 :(得分:3)
我太蠢了。结果就像我每次尝试在Player :: picture中存储表面时忘记了文件扩展名“.png”,并且每当我在main.cpp中声明的SDL_Surface中将其添加时,都会记得添加它。
我觉得我在这里忽略了一些非常简单的东西,但这只是尴尬。对此有什么合适的惩罚?
答案 1 :(得分:0)
什么数据类型是播放器 - >图片? IMG_Load返回什么类型?除非涉及类型转换,否则很难想出在临时变量中保存表达式会改变结果的场景。
我不会调用此指针实例化。您正在实例化某个图片类型的实例并存储指向它的指针。
答案 2 :(得分: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。只需检查文档并确保您正在检查函数返回。这些步骤使调试变得更加容易。