微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用数据结构和循环进行迭代

如何解决使用数据结构和循环进行迭代

我正在编写/修改 SDL2 代码来剪辑 spritesheet,其中每一行代表不同的图像,每列代表该图像的不同模式。然后,剪辑链接一个枚举,以便可以在需要时调用它。

我已经把每一行的列迭代了一遍,但我认为我可以优化更多,因为在我的“剪辑代码”部分,事情变得非常重复。我还包括了使用 incase 的枚举和裁剪函数,这很有帮助。

有没有办法制作图像标识符标签和行位置的列表或数组并循环遍历它们以压缩重复的“剪辑代码”?我想我可以将图像定位信息放在循环之外。每个图像剪辑子片段中的其他所有内容都相同。

    //Enums
    enum CreateForestButtonsprite {CREATE_DEFAULT,CREATE_HOVER,CREATE_INACTIVE,CREATE_pressed,CREATE_TOTAL};
    enum MainMenuButtonsprite {MENU_DEFAULT,MENU_HOVER,MENU_INACTIVE,MENU_pressed,MENU_TOTAL};
    enum NewForestButtonsprite {NEW_DEFAULT,NEW_HOVER,NEW_INACTIVE,NEW_pressed,NEW_TOTAL};

    // Clipping Function
    void renderTexture(SDL_Texture *texture,SDL_Renderer *renderer,int x,int y,SDL_Rect *clip = nullptr)
    {
        SDL_Rect dest;
        dest.x = x;
        dest.y = y;
        if (clip != nullptr) 
        {
            dest.w = clip->w;
            dest.h = clip->h;
        }
        else 
        {
            SDL_QueryTexture(texture,NULL,&dest.w,&dest.h);
        }
        renderTexture(texture,renderer,dest,clip);
    }


    //Clipping Code
    //Load spritesheet texture
        SDL_Texture* longbutton_image = loadTexture("longbuttonspriteSheet.png",renderer);

        //Create Forest Button Setup
        int createbutton_x = SCREEN_WIDTH / 2 - LONGBUTTON_WIDTH;
        int createbutton_y = SCREEN_HEIGHT / 2 - LONGBUTTON_HEIGHT / 2;

        SDL_Rect create_clips[CreateForestButtonsprite::CREATE_TOTAL];
        for (int i = 0; i < CreateForestButtonsprite::CREATE_TOTAL; i++)
        {
            create_clips[i].x = i * LONGBUTTON_WIDTH;
            create_clips[i].y = 0;
            create_clips[i].w = LONGBUTTON_WIDTH;
            create_clips[i].h = LONGBUTTON_HEIGHT;
        }

        int useCreate_Clip = CREATE_DEFAULT;


        // Main Menu Button Setup
        int mainbutton_x = SCREEN_WIDTH / 2 - LONGBUTTON_WIDTH * 2;
        int mainbutton_y = SCREEN_HEIGHT / 2 - LONGBUTTON_HEIGHT / 2;

        SDL_Rect menu_clips[MainMenuButtonsprite::MENU_TOTAL];
        for (int i = 0; i < MainMenuButtonsprite::MENU_TOTAL; i++)
        {
            menu_clips[i].x = i * LONGBUTTON_WIDTH;
            menu_clips[i].y = LONGBUTTON_HEIGHT;
            menu_clips[i].w = LONGBUTTON_WIDTH;
            menu_clips[i].h = LONGBUTTON_HEIGHT;
        }

        int useMenu_Clip = MENU_DEFAULT;

        // New Forest Button Setup
        int newbutton_x = SCREEN_WIDTH / 2 - LONGBUTTON_WIDTH * 3;
        int newbutton_y = SCREEN_HEIGHT / 2 - LONGBUTTON_HEIGHT / 2;

        SDL_Rect new_clips[NewForestButtonsprite::NEW_TOTAL];
        for (int i = 0; i < NewForestButtonsprite::NEW_TOTAL; i++)
        {
            new_clips[i].x = i * LONGBUTTON_WIDTH;
            new_clips[i].y = 2 * LONGBUTTON_HEIGHT;
            new_clips[i].w = LONGBUTTON_WIDTH;
            new_clips[i].h = LONGBUTTON_HEIGHT;
        }

        int useNew_Clip = NEW_DEFAULT;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。