我有一个名为SpriteCollection的类,我用SDL加载图像。该类有一个名为:
的属性SDL_Surface* sprites[];
我认为这是对的(虽然我不确定)。在同一个班级,我有一个方法:
void addNewSprite(SDL_Surface* sprite){
this->sprites[n_sprites+1] = new SDL_Surface;
this->sprites[n_sprites+1] = IMG_Load("spritepath.jpg");
this->n_sprites++;
}
另一个检索SDL_Surface以在屏幕上绘图:
SDL_Surface getSprite(int sprite_index){
return this->sprites[sprite_index];
}
在我正在使用的屏幕上画画:
Draw(x_position, y_position, this->sprite->getSprite[0], screen);
我正常加载图片;没关系,但是IDE在SDL_Surface
和SDL_Surface *
之间返回有关指针和转换的错误。
我做错了什么?
编辑:错误消息:
E:\cGame.cpp|71|error: cannot convert `SDL_Surface' to `SDL_Surface*' for argument `1' to `int SDL_UpperBlit(SDL_Surface*, SDL_Rect*, SDL_Surface*, SDL_Rect*)'|
答案 0 :(得分:5)
在返回类型为getSprite
的{{1}}函数中,您尝试返回SDL_Surface
。也许你的意思是:
SDL_Surface*
此外,这些行非常可疑:
SDL_Surface* getSprite(int sprite_index){
return this->sprites[sprite_index];
}
首先,你动态分配一个新的this->sprites[n_sprites+1] = new SDL_Surface;
this->sprites[n_sprites+1] = IMG_Load("spritepath.jpg");
并存储指向它的指针。然后你通过为它分配SDL_Surface
调用的结果来摆脱那个指针。现在你永远无法IMG_Load
表面,因为你丢失了它的指针。您可以考虑封装精灵并使用RAII惯用法来处理delete
的分配。
除此之外,使用SDL_Surface
代替数组可能会更好。
答案 1 :(得分:3)
SDL_Surface getSprite(int sprite_index)
应该是:
SDL_Surface* getSprite(int sprite_index)