【问题标题】:Inconsistent behaviour from SDL_BlitSurfaceSDL_BlitSurface 的行为不一致
【发布时间】:2012-05-15 13:44:23
【问题描述】:

这是一个示例代码:

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <stdio.h>

int main()
{
    if(SDL_Init(SDL_INIT_EVERYTHING) == -1)
    {
        printf("SDL ERROR: %s", SDL_GetError());
        return 1;
    }

    SDL_Surface *screen;
    screen = SDL_SetVideoMode(128, 128, 32, SDL_SWSURFACE);

    SDL_Surface *img;
    img = IMG_Load("./debug.png");

    SDL_BlitSurface(img, NULL, screen, NULL);
    SDL_Flip(screen);

    SDL_Delay(1000);

    SDL_FreeSurface(img);
    SDL_Quit();
    return 0;
}

它编译得很好,但是当我运行它时,它有时会起作用,而且大多数时候只显示部分图像。我真的无法想象是什么原因造成的......

编辑: 这是我用来测试程序的图像:

【问题讨论】:

  • 图片在某处可用吗?或者您可以发布一个未修改版本的链接吗?
  • 我刚刚编辑并添加了图片的链接......
  • 我发现了这个:bugzilla.libsdl.org/show_bug.cgi?id=1397 看起来问题不是代码那么...
  • 操作系统? SDL 和 SDL_image 版本?
  • 这发生在我使用 Ubuntu 12.04 (gnome) 时。所有的库都是包管理器的最新版本,不幸的是我不记得确切的数字了。现在我使用的是 Kubuntu 12.04,问题就消失了……

标签: c sdl


【解决方案1】:

如果debug.png和你的main.cpp在同一个文件夹,调用IMG_Load("debug.png"),前面的./就不需要了。

顺便说一句,在一行上初始化你的表面并没有错:

SDL_Surface* screen = SDL_SetVideoMode(128, 128, 32, SDL_SWSURFACE);
//and
SDL_Surface* img = IMG_Load("debug.png");

【讨论】:

  • 我知道。我会在真正的代码中这样做,但我这样做只是为了让事情变得清晰......因为出了点问题,我喜欢让一切都变得非常简单明了......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 2011-03-19
  • 2014-11-11
  • 2013-08-21
  • 2011-03-29
相关资源
最近更新 更多