【问题标题】:SDL window does not open correctlySDL 窗口无法正确打开
【发布时间】:2017-10-24 19:42:45
【问题描述】:

我正在学习使用 SDL 库。但是,在我面临的众多问题中,有一个我在 Internet 上找不到解决方案。我用SDL_SetVideoMode设置了视频模式特性,但是运行程序时没有出现新窗口。唯一发生的事情是我的终端显示了一个奇怪的模式,但它看起来不像我应该拥有的窗口,即使是这样,它不会打开一个新窗口。这发生在我尝试运行程序的 shell 窗口中。

这是程序:

#include <stdlib.h>
#include <SDL/SDL.h>

void    pause(void)
{
    int     on = 1;
    SDL_Event event;

    while (on == 1)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                on = 0;
        }
    }
}

int     main(void)
{
    if (SDL_Init(SDL_INIT_VIDEO) == -1)
        return EXIT_FAILURE;
    else
    {
        SDL_SetVideoMode(1024, 576, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("SDL TEST", NULL);
        pause();
        SDL_Quit();
    }
    return EXIT_SUCCESS;
}

我使用 Makefile,里面是这样的:

FLAGS=-Wall -Wextra -Werror
SDLFLAG=-lSDL
NAME=sdl1

all: ${NAME} clean

${NAME}: ${NAME}.o
    gcc -o ${NAME} ${NAME}.o ${FLAGS} ${SDLFLAG}

${NAME}.o: ${NAME}.c
    gcc -o ${NAME}.o -c ${NAME}.c ${FLAGS} ${SDLFLAG}

clean:
    rm -rf *.o

mrproper: clean
    rm -rf ${NAME}

而运行程序的结果如下:

发生了什么?为什么我没有一个名为“SDL TEST”的新空窗口?

【问题讨论】:

  • 这完全没有意义。您没有执行正确的程序。
  • 感谢您的有用评论。
  • 我不建议在 SDL2 出来且稳定时使用 SDL1
  • 我按照这个站点上的说明进行操作:loka.developpez.com/tutoriel/sdl/installation/linux,我看到它在过去的 11 年里没有更新过!就像你说的,我一定是安装了旧版本的 SDL,这可能是我的程序无法运行的原因......我将寻找一种通过 linux bash 获取 SDL2 的方法。
  • 我已经通过命令sudo apt-get install libsdl2-dev 安装了SDL2,我在usr/include/SDL2 中拥有所有.h 文件,并且我使用了标题#include &lt;SDL2/SDL.h&gt;。但是问题仍然存在,所以我想这不是版本问题。我的问题下面的答案让我认为我的代码没有被正确的程序执行。我不知道,这对我来说非常不清楚。

标签: c sdl


【解决方案1】:

看起来 SDL 库尝试使用 libcaca 显示您的窗口

首先尝试,如果您可以通过在 shell 中执行例如 xterm 来打开与 XServer 的连接。如果可行,请尝试使用

SDL_VIDEODRIVER=x11 ./sdl1

强制使用 x11 视频驱动程序并查看它是否正常工作。

【讨论】:

  • 我在 shell 中输入了“xterm”,它告诉我:zupimages.net/up/17/21/87rt.png
  • @nounoursnoir 好吧,这可能就是 SDL 选择 libcaca 而不是 x11 的原因。您必须修复您的环境才能使其正常工作。 export DISPLAY=:0 可能值得一试。
  • 我尝试了export DISPLAY=:0,然后再次尝试使用我的程序。好消息是它没有像我以前那样做奇怪的屏幕(你可以在原始问题的屏幕截图中看到)。糟糕的是,在等待 1 或 2 秒后,SDL_Init 行发生了段错误:(
  • @nounoursnoir 嗯,你真的必须让 xterm 命令工作,那么你的 SDL 程序很有可能也能工作
  • 使用export DISPLAY=:0 后,我尝试使用SDL_VIDEODRIVER=x11 ./sdl1,我的程序不再出现段错误。问题是:我不知道发生了什么变化,我不知道这个命令应该做什么。我只能说出我所看到的......我认为我应该提请您注意的另一个细节是调用SDL_Init失败:(SDL_Init(SDL_INIT_VIDEO) == -1)评估true...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多