我正在学习 SDL2,今天我尝试创建一个带纹理的矩形,但是当我尝试运行该程序时,它只是进入黑屏。
#include <SDL2/SDL.h>
#include "dinoHeader.h"
int main(int argc, const char * argv[]) {
if(SDL_Init(SDL_INIT_EVERYTHING) < 0){
return 1;
}
SDL_Window* window = nullptr;
SDL_Renderer* renderer = nullptr;
SDL_Surface* surface = SDL_LoadBMP("./Images/smile.bmp");
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface);
SDL_FreeSurface(surface);
SDL_Rect rect;
rect.w = 100;
rect.h = 100;
rect.x = (ScreenWidth / 2) - (rect.w / 2);
rect.y = (ScreenHeight / 2) - (rect.h / 2);
window = SDL_CreateWindow("Dino", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, ScreenWidth, ScreenHeight, SDL_WINDOW_OPENGL);
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
game = true;
while (game) {
SDL_Event event;
while(SDL_PollEvent(&event)){
if(event.type == SDL_QUIT){
game = false;
}
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, &rect);
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyTexture(texture);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
请帮帮我
我正在使用 XCODE。
我不知道还能说什么,但 stackoverflow 说:看起来你的帖子主要是代码;请添加更多详细信息。所以你在这里。
SDL_Renderer* renderer = nullptr;
// ...
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface);
// ...
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
在这些行中,您将
nullptr
传递给 SDL_CreateTextureFromSurface
,因为此时尚未创建渲染器。创建纹理时应该使用有效的工作渲染器 - 因此,首先创建渲染器,然后才能使用它来创建纹理。
如评论中所述,您应该检查返回值(在这种情况下,您的
texture
应该是 nullptr
,因为纹理创建失败),如果它们不符合预期 - 使用 SDL_GetError
检查错误消息 SDL已经为你准备好了。