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)画像をロードする方法がわかりません。

4

1 に答える 1

1

このコードは、スプライトシートの個々の正方形のクリッピング座標を提供しているように見えます。画像とはまったく相互作用していないようです。

PNGをロードする場合は、追加のSDL_imageライブラリを使用する必要があります。画面に描画するためにSDL_Surface呼び出すときに、クリッピング座標で使用できるポインタが生成されます。SDL_BlitSurface

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

将来的には、計算されたクリッピング位置やスプライトシートに関するその他の情報を保持し、必要に応じて呼び出しをラップするSpriteSheetクラスを考案することで、このアイデアを拡張できSDL_BlitSurfaceます。

于 2012-05-04T23:38:08.263 に答える