2012-05-04 3 views
0

Для моей видеоигры в C - SDL мне нужно использовать спрайт, который я сделал сам. Размер изображения 100x100 и каждая картина, которую я хочу, чтобы принять это 25x25Как загрузить изображение в функцию?

я нашел где-то хорошая функция, которая может сделать это для меня:

// Wraps a rectangle around every sprite in a sprite sheet and stores it in an array of  rectangles(Clip[]) 

void spriteSheet(){ 

int SpriteWidth = 25; int SpriteHeight= 25; int SheetDimension = 4; 
int LeSprites = SheetDimension * SheetDimension;// Number of Sprites on sheet 
SDL_Rect Clip[LeSprites]; // Rectangles that will wrap around each sprite 

int SpriteXNum = 0;// The number sprite going from left to right 
int SpriteYNum = 0;// The number sprite going from top to bottom 
int YIncrement = 0;// Increment for each row. 
int i = 0; 
for(i = 0; i< LeSprites; i++){// While i is less than number of sprites 

    if(i = 0){// First sprite starts at 0,0 
     Clip[i].x = 0; 
     Clip[i].y = 0; 
     Clip[i].w = SpriteWidth; 
     Clip[i].h = SpriteHeight; 
    } 
    else{ 

     if(SpriteXNum < SheetDimension - 1){// If we have reached the end of the row, go back to the front of the next row 
      SpriteXNum = 0; 
     } 
     if(YIncrement < SheetDimension - 1){ 
      SpriteYNum += 1;       // Example of 4X4 Sheet 
     }           // ________________ 
     Clip[i].x = SpriteWidth * SpriteXNum;  // | 0 | 1 | 2 | 3 | 
     Clip[i].y = SpriteHeight * SpriteYNum;  // |===============| 
                // | 0 | 1 | 2 | 3 | 
                // |===============| 
     Clip[i].w = SpriteWidth;      // | 0 | 1 | 2 | 3 | 
     Clip[i].h = SpriteHeight;     // |===============| 
                // | 0 | 1 | 2 | 3 | 
    }            // |---------------| 
    SpriteXNum++; 
    YIncrement++; 
} 

} 

Но теперь я не знаю, как я могу загрузить мой (png), чтобы применить эту функцию.

ответ

1

Похоже, что этот фрагмент кода дает вам координаты отсечения для каждого отдельного квадрата листа спрайтов. Кажется, он вообще не взаимодействует с изображением.

Если вы хотите загрузить PNG, вы должны использовать дополнительные SDL_image library. Он будет вызывать указатель SDL_Surface, который вы можете использовать с координатами отсечения, когда вы вызываете SDL_BlitSurface, чтобы нарисовать его на экране.

Обратите внимание, что вы должны попытаться получить SpriteDimension, и т.д. значения из самого изображения (путем деления ширины изображения (w) и высоту (h) по размеру отдельного спрайта).

В будущем вы можете расширить эту идею, разработав класс SpriteSheet, который содержит рассчитанные положения отсечения и другую информацию о листе спрайта и который, в случае необходимости, завершает вызов SDL_BlitSurface.

+0

Спасибо за ваш ответ, но мне нужен каждый квадрат изображения в массиве. Таким образом, я смогу вызвать изображение, как изображение [0] image [12] .. –

+0

Тип поражения состоит в том, чтобы иметь лист спрайта, но в этом случае вы могли бы создать новую поверхность (используя SDL_CreateSurface) для каждого спрайта на лист, а затем blit в эту поверхность, используя SDL_BlitSurface, таким же образом, как и рисовать на поверхности экрана. После этого просто сохраните указатели на поверхности в массиве. – ravuya