NobleEngine icon indicating copy to clipboard operation
NobleEngine copied to clipboard

How to create a self drawing NobleSprite?

Open AllenDang opened this issue 2 years ago • 1 comments

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?

AllenDang avatar Oct 17 '23 07:10 AllenDang

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

stiv-iv avatar Nov 06 '23 12:11 stiv-iv