2009-06-12 5 views
1

어쩌면 큰 것은 아니지만 백 프레임이나 그럴 수도 있습니다. 배열을 만들고 각 이미지를 개별적으로로드하여로드하는 유일한 방법은 무엇입니까?큰 애니메이션을로드하는 더 좋은 방법이 있습니까?

load_image()는 이미지를로드하고 해당 BPP를 변환하는 함수입니다.

expl[0] = load_image("explode1.gif"); 
expl[1] = load_image("explode2.gif"); 
expl[2] = load_image("explode3.gif"); 
expl[3] = load_image("explode4.gif"); 
... 
expl[99] = load_image("explode100.gif"); 

더 나은 방법이어야합니다. 최소한 나는 희망합니다.

LoadAnimation(char* isFileBase, int numFrames) 
{ 
    char szFileName[255]; 
    for(int i = 0; i < numFrames; i++) 
    { 
     // append the frame number and .gif to the file base to get the filename 
     sprintf(szFileName, "%s%d.gif", isFileBase, i); 
     expl[i] = load_image(szFileName); 
    } 
} 

답변

1

일반적인 기술은 spritesheets입니다, 하나의 큰 이미지가 세포의 격자로 구분되는 :

+0

프레임의 양이 꽤 큰 경우 (아마도 15 개 이상) – Skurmedel

+0

스프라이트를 고려하고 있었지만 장기간에 가장 좋은 방법 일 수 있습니다.하지만 스프라이트를 고려하고 있었지만 여전히 최선의 방법 이었는지 확신 할 수 없었습니다. 반복하여 SDL_Surface를 자릅니다. 그래서 이것은 여전히 ​​무언가를하는 좋은 방법입니다. 애니메이션의 50 프레임을 가정 해 봅시다. – Justen

+0

기본적으로 애니메이션의 데이터를 반복하는 것이 있습니다. SDL_BlitSurface 함수는 이것을 매우 효율적으로 만듭니다. 이 기술은 200 개가 넘는 프레임으로 스프라이트를 블릿하는 데 사용됩니다. 더 이상 사용할 수없는 특별한 이유가 없습니다. – SingleNegationElimination

1

어쩌면 루프의 각 반복에 대한 파일 이름을 빌드하는 유틸리티 기능을 사용하여로드를 단순화 각 셀에는 한 프레임의 애니메이션이 포함됩니다. 흔히 모든 게임 엔티티의 모든 애니메이션 프레임은 때로는 거대한 스프라이트 시트에 배치됩니다.

+0

코드를 보내 주셔서 감사합니다. 아마도이 첫 번째 프로그램에서 사용하게 될 것입니다. – Justen

1

격자로로드하는 대신 모든 프레임을 하나의 수직 스트립 (동일한 이미지)에 쌓아 넣으십시오. 그런 다음 프레임 당 얼마나 많은 행을 알아야하며 프레임 행 오프셋에 대한 포인터를 설정할 수 있습니다. 당신은 여전히 ​​직접적으로 또는 사소하게 별도의 이미지로 씹어 서 표시 할 수있는 인접한 스캔 라인을 갖게됩니다.

관련 문제