【问题标题】:SDL_RenderCopy() doesn't work with arraySDL_RenderCopy() 不适用于数组
【发布时间】:2015-03-03 09:27:24
【问题描述】:

我在互联网和这里搜索过,我只找到了 1 个很好的帖子SDL_RenderCopy with an array of Rectangles。 (据我所知)没有答案,但我的问题与那里相同。有什么办法可以做到吗?

SDL_RenderCopy(renderer, texture, &rects[index], &sprPos);

调试是这样说的:

Error   1   error C2664: 'int SDL_RenderCopy(SDL_Renderer *,SDL_Texture *,const SDL_Rect *,const SDL_Rect *)' : cannot convert argument 3 from 'SDL_Rect **' to 'const SDL_Rect *'  c:\users\kushnirenko\documents\visual studio 2013\projects\sdl_project\sdl_project\main.cpp 96  1   SDL_Project

2   IntelliSense: argument of type "SDL_Rect **" is incompatible with parameter of type "const SDL_Rect *"  c:\Users\kushnirenko\Documents\Visual Studio 2013\Projects\SDL_Project\SDL_Project\main.cpp 96  37  SDL_Project

【问题讨论】:

  • Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. Questions without a clear problem statement are not useful to other readers. See: How to create a Minimal, Complete, and Verifiable example.
  • 您的答案甚至不直观。 OP,您是否从参数 3 中删除了与号?除非需要双指针,否则使用 & 不是素数;无论如何,数组都是通过引用传递的。

标签: c++ c arrays sdl sdl-2


【解决方案1】:

我解决了这个问题。有一种方法可以将数组设置为 SDL_RenderCopy。这里是:

// Sprites atlas regions
    SDL_Rect left = { sprite * 32, 32, 32, 32 };
    SDL_Rect right = { sprite * 32, 64, 32, 32 };
    SDL_Rect up = { sprite * 32, 96, 32, 32 };
    SDL_Rect down = { sprite * 32, 0, 32, 32 };

    SDL_Rect leftIdle = { 32, 32, 32, 32 };
    SDL_Rect rightIdle = { 32, 64, 32, 32 };
    SDL_Rect upIdle = { 32, 96, 32, 32 };
    SDL_Rect downIdle = { 32, 0, 32, 32 };
    // End of sprite atlas

    sprPos = { x, y, 32, 32 };

    spritesCoords[0] = left;
    spritesCoords[1] = right;
    spritesCoords[2] = up;
    spritesCoords[3] = down;

    spritesCoords[4] = leftIdle;
    spritesCoords[5] = rightIdle;
    spritesCoords[6] = upIdle;
    spritesCoords[7] = downIdle;

    sprFrame = spritesCoords[spriteIndex]; // This is solutuion.

    SDL_RenderClear(renderer);
    SDL_RenderCopy(renderer, texture, &sprFrame, &sprPos);
    SDL_RenderPresent(renderer);

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 2018-11-29
    • 2022-01-12
    相关资源
    最近更新 更多