【问题标题】:c++ SDL rectangle app stops workingc ++ SDL矩形应用程序停止工作
【发布时间】:2015-04-13 11:21:46
【问题描述】:

我正在尝试使用 sdl 和 c++ 在屏幕上显示一个矩形。该文件可以编译,但它停止工作并返回 255。你能推荐我更好的吗?

代码如下:

  SDL_Window* window;

  SDL_Rect* SrcR; //rectangle
  SDL_Rect* DestR; //dist rectangle

  SrcR->x = 0;
  SrcR->y = 0;
  SrcR->w = SHAPE_SIZE;
  SrcR->h = SHAPE_SIZE;

  DestR->x = 100 / 2 - SHAPE_SIZE / 2;
  DestR->y = 50 / 2 - SHAPE_SIZE / 2;
  DestR->w = SHAPE_SIZE;
  DestR->h = SHAPE_SIZE;

  SDL_Init(SDL_INIT_VIDEO);
  window = SDL_CreateWindow("title", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 200, 250, NULL);

  SDL_Renderer *renderer = NULL;
  renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
  SDL_Texture *texture = NULL;

  SDL_Surface* surface;
  surface = SDL_GetWindowSurface(window);
  SDL_FillRect(surface, NULL, SDL_MapRGB(surface->format, 255, 0, 0));
  texture = SDL_CreateTextureFromSurface(renderer, surface);

  SDL_RenderClear(renderer);

  SDL_RenderCopy(renderer, texture, SrcR, DestR); //here i got error before

  SDL_RenderPresent(renderer);

【问题讨论】:

  • 检查 SDL_* 函数返回的内容 - 其中一个可能由于某种原因而失败。检查函数调用是否成功通常是一个好主意...

标签: sdl sdl-2


【解决方案1】:

您错误地使用了SDL_Rect。您已经为它定义了一个指针(见下文),但您从未为它分配内存。然后,您尝试将值分配给您也未能初始化的矩形,因此可能有任何旧的垃圾地址。

SDL_Rect* SrcR; //rectangle
SDL_Rect* DestR; //dist rectangle

SrcR->x = 0;
SrcR->y = 0;
SrcR->w = SHAPE_SIZE;
SrcR->h = SHAPE_SIZE;

DestR->x = 100 / 2 - SHAPE_SIZE / 2;
DestR->y = 50 / 2 - SHAPE_SIZE / 2;
DestR->w = SHAPE_SIZE;
DestR->h = SHAPE_SIZE;

应该如下:

SDL_Rect SrcR; //rectangle
SDL_Rect DestR; //dist rectangle

SrcR.x = 0;
SrcR.y = 0;
SrcR.w = SHAPE_SIZE;
SrcR.h = SHAPE_SIZE;

DestR.x = 100 / 2 - SHAPE_SIZE / 2;
DestR.y = 50 / 2 - SHAPE_SIZE / 2;
DestR.w = SHAPE_SIZE;
DestR.h = SHAPE_SIZE;

也可以直接初始化如下:

SDL_Rect SrcR = {0, 0, SHAPE_SIZE, SHAPE_SIZE};
SDL_Rect DestR = {(50 - SHAPE_SIZE/2), (25 - SHAPE_SIZE/2), SHAPE_SIZE, SHAPE_SIZE};

最后,当调用SDL_RenderCopy 时,请记住您现在使用的是实例而不是指针,因此您需要传递矩形的地址:

SDL_RenderCopy(renderer, texture, &SrcR, &DestR);

您绝对应该对评论中提到的 SDL_* 函数进行一些错误检查,尤其是在您从函数获取指针的情况下。

【讨论】:

  • 非常感谢。它奏效了,我完成了这个项目 xD
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多