2012-05-04 8 views
0

C - SDLの私のビデオゲームでは、自分で作ったスプライトシートを使う必要があります。 画像サイズは100×100であると私が取りたい各画像は25×25関数で画像を読み込むにはどうすればよいですか?

は私がどこかで私のためにそれを行うことができます素敵な機能見つかっです:

// 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を呼び出して画面に描画すると、クリッピング座標で使用できます。

画像の幅(w)と高さ(h)を個々のスプライトのサイズで割って、画像からSpriteDimensionなどの値を取得するようにしてください。

将来的には、計算されたクリッピング位置やスプライトシートに関するその他の情報を保持し、コールをSDL_BlitSurfaceに適切にラップするSpriteSheetクラスを考案することで、この考え方を拡張できます。

+0

ありがとうございますが、私は画像の各四角形が配列に必要です。だから私はimage [0] image [12]のようなイメージを呼び出すことができるでしょう。 –

+0

種類はスプライトシートを持つという目的を打ち負かしますが、その場合はスプライトごとに新しいサーフェス(SDL_CreateSurfaceを使用)を作成できますSDL_BlitSurfaceを使用して、そのサーフェスに描画するのと同様の方法で、そのサーフェスにblitします。その後、サーフェスポインタを配列に格納するだけです。 – ravuya

関連する問題