>source

내 오래된 c++ code는 루프를 사용하여 한 번에 하나의 행을 읽고 개별 스프라이트 클립으로 나눌 수 있습니다. 모든 스프라이트는 같은 크기입니다. 잘 작동합니다.

이제는 루프를위한 클리핑 요소를 구조체에 넣어 주어진 스프리시터에서 모든 그래픽을 반복하기 위해 단일 클리핑 기능을 작성할 수 있도록합니다. 일이 일할 수있는 몇 가지 문제로 실행됩니다. 내가 그들을 구조체에 넣을 때 enums와 함께 바뀌었고, 나는 루프를 위해 중첩 된 것을 망쳐 놓았다고 생각합니다.

이전 code

const int LONGBUTTON_HEIGHT= 128;
const int LONGBUTTON_WIDTH= 256;
enum CreateButtonState { CREATE_DEFAULT, CREATE_HOVER, CREATE_PRESSED, CREATE_TOTAL };
enum CreditsButtonState { CREDITS_DEFAULT, CREDITS_HOVER, CREDITS_PRESSED, CREDITS_TOTAL };
enum MenuButtonState { MENU_DEFAULT, MENU_HOVER, MENU_PRESSED, MENU_TOTAL };
main
{
//Load long button spritesheet texture
SDL_Texture* longbutton_image= loadTexture("longbuttonSpriteSheet.png", renderer);
//Long Buttons
//Create Button Setup
SDL_Rect create_clips[CreateButtonState::CREATE_TOTAL];
for (int i= 0; i < CreateButtonState::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;
//Credits Button Setup
SDL_Rect credits_clips[CreditsButtonState::CREDITS_TOTAL];
for (int i= 0; i < CreditsButtonState::CREDITS_TOTAL; i++)
{
    credits_clips[i].x= i * LONGBUTTON_WIDTH;
    credits_clips[i].y= 1 * LONGBUTTON_HEIGHT;
    credits_clips[i].w= LONGBUTTON_WIDTH;
    credits_clips[i].h= LONGBUTTON_HEIGHT;
}
int useCredits_Clip= CREDITS_DEFAULT;
//Menu Button Setup
SDL_Rect menu_clips[MenuButtonState::MENU_TOTAL];
for (int i= 0; i < MenuButtonState::MENU_TOTAL; i++)
{
    menu_clips[i].x= i * LONGBUTTON_WIDTH;
    menu_clips[i].y= 2 * LONGBUTTON_HEIGHT;
    menu_clips[i].w= LONGBUTTON_WIDTH;
    menu_clips[i].h= LONGBUTTON_HEIGHT;
}
int useMenu_Clip= MENU_DEFAULT;
return 0;
}

새 code

int originalspriteH= 128;
int originalspriteW= 256;
int spritesheetcols= 2;
    struct Graphic
    {
    typedef enum buttonstate {DEFAULT, HOVER, PRESSED, TOTAL};
    SDL_Rect clip;
    int useClip;
    };
    void clipSprites(int spritesheetcols, int originalspriteH, int originalspriteW, [Graphic &amp;
graphic])
    {
    for (int j=0; j < spritesheetcols; j++)
    {
        graphic.clip[graphic.buttonstate::TOTAL];
    }
        for (int i= 0, i < graphic.buttonstate::TOTAL; i++)
        {
            graphic.clip[i].x= i * originalspriteW;
            graphic.clip[i].y= j * originalspriteH;
            graphic.clip[i].h= originalspriteW;
            graphic.clip[i].w=  originalspriteH;
        }
        graphic.useClip= DEFAULT;
    }
main
{
clipSprites(2, 128, 256, [create, credits, menu])
return 0;
}

한 번에 작은 변화를 만드십시오. 컴파일, 테스트 및 수정. 반복.

Phil19702021-07-22 14:13:07

code가 컴파일됩니까? 메인 {이것은 비정상적인 구문입니다.

prehistoricpenguin2021-07-22 14:13:07

이것은 작은 변화입니다. 전체 code는 컴파일됩니다. 이것은 내가 수정하고자하는 부품을 수정하고자하는 작은 스 니펫 일뿐입니다.

Jeffrey2021-07-22 14:13:07

그런 다음 컴파일러 오류를 해결하려고 시도 할 수 있으며, 현대적인 컴파일러는 THME를 수정하기 위해 많은 힌트를 줄 것입니다.

prehistoricpenguin2021-07-22 14:13:07

"새로운"code에는 수많은 오류가 있습니다. 아마도 당신은 sdl_rect clip을 선언하는 것을 의미합니다 [buttonstate :: Total]; 구조체 그래픽에서? Clipsprites에 중첩 된 루프가 없습니다. 당신은 순차적으로 실행되는 두 개의 루프가 있습니다 (첫 번째는 아무 것도하지 않습니다).

1201ProgramAlarm2021-07-22 14:13:07
  • 이전 파이썬의 바이너리 문자열에서 매개 변수 대체
  • 다음 python : psycopg2 -extras.batch 실행을 사용하여 가변 열에 삽입하십시오