NobleEngine
NobleEngine copied to clipboard
How to create a self drawing NobleSprite?
Describe the bug I tried to create a self drawing sprite with following code.
BallSprite.lua
BallSprite = {}
class("BallSprite").extends(NobleSprite)
function BallSprite:init(x, y)
BallSprite.super.init(self)
BallSprite:setSize(16, 16)
BallSprite:setCollideRect(0, 0, 16, 16)
self.direction = Geometry.vector2D.new(1, 1)
self.speed = 8
self:add(x, y)
end
function BallSprite:draw(x, y, width, height)
Graphics.fillCircleInRect(x, y, width, height)
end
function BallSprite:collisionResponse(other)
return Graphics.sprite.kCollisionTypeBounce
end
LevelScene.lua
import("entities/ball")
LevelScene = {}
class("LevelScene").extends(NobleScene)
local scene = LevelScene
function scene:init()
scene.super.init(self)
BallSprite(100, 100)
end
function scene:enter()
scene.super.enter(self)
end
function scene:start()
scene.super.start(self)
end
function scene:update()
scene.super.update(self)
end
function scene:exit()
scene.super.exit(self)
end
function scene:finish()
scene.super.finish(self)
end
The error message is
entities/ball.lua:7: bad argument #-2 to 'setSize' (playdate.graphics.spriteud expected, got nil)
stack traceback:
[C]: in method 'setSize'
entities/ball.lua:7: in field 'init'
CoreLibs/object.lua:70: in global 'BallSprite'
scenes/Level.lua:10: in field 'init'
CoreLibs/object.lua:70: in field 'NewScene'
libraries/noble/Noble.lua:268: in upvalue 'executeTransition'
libraries/noble/Noble.lua:459: in function <libraries/noble/Noble.lua:425>
What am I doing wrong here?
You have to use "self" before methods for sprites.
function BallSprite:init(x, y)
BallSprite.super.init(self)
self:setSize(16, 16)
self:setCollideRect(0, 0, 16, 16)
self.direction = Geometry.vector2D.new(1, 1)
self.speed = 8
self:add(x, y)
end