여러 표면을 한 번에 블리 팅하는 SDL


10

레벨 배경의 스프라이트가 512x512 청크로 분할되는 플랫폼 게임을 작성하려고합니다. 한 번에 3 개의 덩어리를 메모리에 보관하고 3 개를 모두 화면에 블리트로하는 코드를 작성하려고합니다. 내가 가진 현재 코드는 다음과 같습니다.

SDL_Rect where;
where.y = -game->camera->y;

where.x = -game->camera->x - MAP_WIDTH;
SDL_BlitSurface(left_chunk, NULL, screen, &where);

where.x = -game->camera->x;
SDL_BlitSurface(center_chunk, NULL, screen, &where);

where.x = -game->camera->x + MAP_WIDTH;
SDL_BlitSurface(right_chunk, NULL, screen, &where);

내가 겪고있는 문제는 가장 먼저 덩어리가 부서지는 것이 나타나는 유일한 문제입니다. 나머지는 화면에 나타나지 않습니다. 이 문제는 알파 투명도와 관련이 있다고 생각하지만 청크가 전혀 겹치지 않더라도 여전히 깜박하지 않습니다. 코드의 다른 부분에서는 문자와 배경과 같은 여러 항목을 한 번에 화면에 표시하고 모두 올바르게 표시됩니다. 이 특정 코드 세그먼트는이 문제가 발생하는 유일한 영역입니다.

스크린 샷

left_chunk를 무시하는 줄을 주석 처리하면 다음과 같이 변경됩니다.

스크린 샷


계산 된 X 값이 이미지를 화면의 가시 영역에 배치 하시겠습니까?
Zack The Human

@ZackTheHuman 화면이 300x175에 불과하고 맵 청크가 512x512이므로 부분적으로 화면이 벗어납니다. 처음에는 문제가 될 수 있다고 생각했지만 화면에 표시되는지 여부는 올바르게 렌더링되는지 여부와 관련이없는 것 같습니다. 문제를 설명하기 위해 스크린 샷을 업로드 할 수 있습니다.
extropic-engine

1
SDL 문서에 따르면 SDL_BlitSurface 는 최종 사각형을 dstrect를 블리 팅 후. 각 블리트 후 where 변수를 재설정하려고 했습니까 ?
Asakeron

@Asakeron 그게 다야! 어디 에서 수정 해야할지 몰랐습니다 . 당신은 당신의 코멘트를 대답으로 만들어야합니다!
extropic-engine

답변:


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.