これまでmain.luaに色々と記述してきましたが、利用するオブジェクトを外部クラスに切り分けてみます。
前回のコライダーを埋め込むプロジェクトのwallオブジェクトを切り出します。
まず、wall.luaをsourceディレクトリに新規作成します。
local gfx <const> = playdate.graphics
class('Wall').extends(gfx.sprite)
function Wall:init(x, y, w, h)
Wall.super.init(self)
local wallImage = gfx.image.new(w, h)
gfx.pushContext(wallImage)
gfx.setColor(gfx.kColorWhite)
gfx.fillRect(0, 0, w, h)
gfx.popContext()
self:setImage(wallImage)
self:moveTo(x, y)
self:setCollideRect(0, 0, self:getSize())
end
class('Wall').extends(gfx.sprite)でspriteを継承したWallクラスを作成しています。
更にコンストラクタ関数:initでWallクラスの初期化を行います。
Wall.super.init(self)で基底クラスのコンストラクタをオーバーライドし、前回記述のコードを移植しています。
前回コードではwallSpriteに画像セットしたりなどしていましたが、selfに書き直します。
上記設定後、wall.luaをmain.luaに読み込みます。
import "CoreLibs/object"
import "CoreLibs/graphics"
import "CoreLibs/sprites"
import "CoreLibs/timer"
import "wall" -- wall.luaを読み込み
local gfx <const> = playdate.graphics
local playerSprite = nil
local wallSprite = nil
function myGameSetUp()
local playerImage = gfx.image.new("Images/playerImage")
assert( playerImage )
playerSprite = gfx.sprite.new( playerImage )
playerSprite:moveTo( 200, 120 )
playerSprite:setCollideRect(0, 0, playerSprite:getSize()) -- playerSpriteにコライダーセット
playerSprite.collisionResponse = playdate.graphics.sprite.kCollisionTypeBounce -- コライダーとぶつかったときのふるまい
playerSprite:add()
wallSprite = Wall(300, 120, 20, 80) -- Wallオブジェクト新規作成
wallSprite:add() -- ゲーム内に追加
local backgroundImage = gfx.image.new( "Images/background" )
assert( backgroundImage )
gfx.sprite.setBackgroundDrawingCallback(
function( x, y, width, height )
backgroundImage:draw( 0, 0 )
end
)
end
-- 略 --
import "wall"でsource直下に配置したwall.luaを読み込みます。
更にmyGameSetUp()で壁を生成していたコードを削除、wallSprite = Wall(300, 120, 20, 80)で壁オブジェクトを新規作成しています。
あとはwallSprite:add()でゲーム内に追加します。