1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PlaydateAdvent Calendar 2022

Day 13

【Playdate】外部クラスを扱う

Posted at

これまでmain.luaに色々と記述してきましたが、利用するオブジェクトを外部クラスに切り分けてみます。
前回のコライダーを埋め込むプロジェクトのwallオブジェクトを切り出します。
まず、wall.luasourceディレクトリに新規作成します。

wall.lua
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クラスを作成しています。
更にコンストラクタ関数:initWallクラスの初期化を行います。
Wall.super.init(self)で基底クラスのコンストラクタをオーバーライドし、前回記述のコードを移植しています。
前回コードではwallSpriteに画像セットしたりなどしていましたが、selfに書き直します。

上記設定後、wall.luamain.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()でゲーム内に追加します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?