我正在尝试学习 SDL2,但是当我尝试制作一个带纹理的矩形时,我的程序只是进入黑屏

问题描述 投票:0回答:1

我正在学习 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 说:看起来你的帖子主要是代码;请添加更多详细信息。所以你在这里。

c++ sdl sdl-2
1个回答
0
投票
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已经为你准备好了。

© www.soinside.com 2019 - 2024. All rights reserved.