首页 > 解决方案 > 在 C 和 SDL 中用 last 覆盖的数组元素

问题描述

我知道类似的问题已经被问过很多次,但我发现的其他答案都没有帮助。

基本上我正在尝试创建一堆带有偏移量的块(自定义结构)。我创建了一个具有自定义位置的新 SDL_Rect 并将其添加到具有其他属性的块中。然后将该块添加到数组中。问题是最后,所有块都共享最后一个创建的矩形(其他属性很好)。

有人可以帮我吗?我不知道这怎么可能是一个指针问题,因为我没有重用任何东西,但显然它是。

    SDL_Color blockColors[] = 
    {
        {192,  0,  0,  0},
        {192, 64,  0,  0},
        {192,128,  0,  0},
        {192,192,  0,  0},
        {  0,192,  0,  0},
        {  0,  0,192,  0},
    };
    int blockColorCount = 6;

    Block* blocks = malloc(sizeof(Block) * blockColorCount * 25);
    int blockCount = blockColorCount * 25;

    //blocks creation
    for (int y = 0; y < blockColorCount; y++)
    {
        for (int x = 0; x < 25; x++)
        {
            SDL_Rect blockRectangle;
            blockRectangle.x = 25+x*18;
            blockRectangle.y = 180+y*18;
            blockRectangle.w = 18;
            blockRectangle.h = 18;

            Block tempBlock = {&blockRectangle,blockColors[y],1,false};
            blocks[y*25 + x] = tempBlock;
            printf("%d %d\n",blocks[y*25+x],&tempBlock);

        }
    }
typedef struct
{
    SDL_Rect* rect;
    SDL_Color color;
    int health;
    bool dead;
} Block;

标签: cpointers

解决方案


推荐阅读