一般的なゲームでは様々な画像を使用しています。
その中でも特に主人公キャラや敵キャラなどの画面上を動き回る画像のことをスプライト(Sprite)と言います。
ここでは、そのスプライトをDSLua上で使用するために必要な関数群について説明していきます。
スプライトを使用するためには、まず画像を用意する必要があります。
幸いscriptsフォルダの中にはすぐに使えるスプライトが準備してあるのでこれを利用することにします。
- vaisseau.bmp
- vaisseau.bmp.pal
- vaisseau.raw
というよく似た名前のファイルがあると思います。
これらは上から順に、元画像、画像のパレット、圧縮済み画像となっています。
※この画像自体はWiki用にJPG画像にしてあります。
DSLuaでは画像をパレットと圧縮済み画像に変換し、それらを合成して表示しています。
スプライトの表示方法
実際にスプライトを表示するためには、まずパレットデータをメモリ上に読み込むことから始めます。
Sprite.LoadPalette(Screen, Palette, File)
Screen……スプライトを表示する画面を指定します。初期化処理に用いる番号をそのまま使用できます
Palette……パレットデータを読み込むパレット番号を指定します(0~255?)
File……パレットデータ(.pal)ファイルを指定します
パレットデータを読み込んだら、次はフレームサイズとカラーモードを指定します
Object = FrameStrip.Create(Screen, Width, Height, Mode)
Object……初期化処理のようにオブジェクト名を返します
Screen……どちらのスクリーンに表示するか。
Width……画像の横幅
Height……画像の縦幅
Mode……16、256、16bitを指定できます(現在は256までしか対応していない?)
次にいよいよ画像データを読み込みます。
Object:LoadBin(File, Frame)
Object……サイズとカラーモードを指定したオブジェクトを指定します。
File……実際に読み込む画像(.raw)ファイルを指定します。
Frame……画像のフレーム数を指定します。フレームを分ける必要がない場合には1を指定
画像データの読み込みが完了したら、あとはそれを画面上に表示するだけです。
SpriteObject = Sprite.Create(Object, FrameNumber, Palette, X, Y)
SpriteObject……画面に表示したスプライトのオブジェクト名
Object……画像を読み込んだオブジェクト名
FrameNumber……初期フレームの番号
Palette……パレット番号
X……表示させるX座標
Y……表示させるY座標
スプライトオブジェクト関数
画面にスプライトを表示することはできるようになりましたが、コレだけではまだ動かすことが出来ません。
これらを実際に動かすために、スプライトオブジェクトには以下の関数が用意されています。
- スプライトを移動させる
SpriteObject:MoveTo(X, Y)
SprteObject……スプライトオブジェクト
X……スプライトを表示するX座標(絶対座標)
Y……スプライトを表示するY座標(絶対座標) - スプライトのフレームを変更する
SprteObject:SetFrame(Object, FrameNumber)
SpriteObject……スプライトオブジェクト
Object……画像のオブジェクト名
FrameNumber……変更するフレーム番号 - スプライトを消去し、メモリからもデータを解放する
SprteObject:Free()
SpriteObject……スプライトオブジェクト - メモリからデータを解放する
Object:FreeAll()
Object……メモリ上から消去するオブジェクト名
こちらはFrameStrip.Create()で読み込んだオブジェクトに対して使用してやってください
サンプルコード
長々と説明してきましたが、これで一通りの説明が終わったので次は実際に動かしてみましょう。
01:SCREEN_BOTTOM = 0 02:SCREEN_TOP = 1 03:BGTopText = Screen.LoadTextBG() 04:Screen.Initialize(SCREEN_TOP, BGTopText) 05: 06:BGTopText:SetColor(6) 07:BGTopText:PrintXY(0, 0, "Sprite Sample..") 08: 09:PaletteFile= "vaisseau.bmp.pal" 10:Palette = 1 11: 12:width = 32 13:height = 32 14: 15:RawFile = "vaisseau.raw" 16:RawFrame= 1 17: 18:X = math.floor((256 - width) / 2) 19:Y = 192 - height 20: 21:Sprite.LoadPalette(SCREEN_BOTTOM, Palette, PaletteFile) 22: 23:FSObject = FrameStrip.Create(SCREEN_BOTTOM, width, height, 256) 24: 25:FSObject:LoadBin(RawFile, RawFrame) 26: 27:SpriteObject = Sprite.Create(FSObject, 0, Palette, X, Y) 28: 29:iNewX = X; iNewY = Y 30: 31:while true do 32: 33: if Stylus.Down() then 34: iNewX=Stylus.X()-16;iNewY=Stylus.Y()-16 35: SpriteObject:MoveTo(iNewX, iNewY) 36: end 37: 38: if Pads.Start() then 39: break 40: end 41: 42: Screen.WaitForVBL() 43:end 44: 45:SpriteObject:Free() 46:FSObject:FreeAll()
このサンプルコードはこちらからダウンロードできます。