これまで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()
でゲーム内に追加します。