问题描述
我正在编写/修改 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 (将#修改为@)