当我运行这个程序时(C):
#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>
#include "./constants.h"
int game_is_running = FALSE;
SDL_Window *window = NULL;
SDL_Renderer * renderer = NULL;
int initialize_window(void){
if(SDL_Init(SDL_INIT_EVERYTHING) != 0){
fprintf(stderr, "Error initializing SDL\n");
return FALSE;
}
window = SDL_CreateWindow("SDL WINDOW", SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_BORDERLESS);
if (!window){
fprintf(stderr,"Error creating SDL Window\n");
return FALSE;
}
SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if(!renderer){
fprintf(stderr,"Error creating renderer\n");
return FALSE;
}
return TRUE;
}
void setup(){
}
void update(){
}
void render(){
SDL_SetRenderDrawColor(renderer, 0,0,0,255);
SDL_RenderClear(renderer);
//Start drawing game objects
SDL_SetRenderDrawColor(renderer, 255,0,0,255);
SDL_RenderDrawLine(renderer,0,0,50,50);
SDL_RenderPresent(renderer);
}
void destroy_window(){
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
//exit(0);
}
int main(int argc, char **argv){
int game_is_running = initialize_window();
setup();
SDL_Event e;
while(game_is_running){
SDL_PollEvent(&e);
if(e.type ==SDL_KEYDOWN)
{
if(e.key.keysym.sym == SDLK_ESCAPE){
game_is_running = FALSE;
destroy_window();
}
}
update();
render();
}
destroy_window();
return 0;
}
我得到一个透明且没有颜色的空窗口
这是一个C程序,我正在使用
gcc main.c -o game -lSDL2 -lSDL2main
编译在kali 2024.2上运行的程序
我尝试采用 render() 函数并将其放入
while(game_is_running)
循环中。
还尝试将
SDL_Create_Renderer()
标志设置为 0。
我还没有在网上看到这个问题的答案,并且这个解决方案不是我正在寻找的
非常感谢任何帮助:))
(StackOverflow 也将其检测为 cpp 程序,但它是 C 语言)
事实证明这只是我的一个愚蠢的错误。正如 @Joel 指出的,
SDL_Renderer *renderer = ...;
中的 int initialize_window()
遮蔽了我在 renderer
之前创建的 int initialize_window()
的全局变量。
为了解决这个问题,我们可以去掉 SDL_Renderer
来简单地引用 renderer
。