NobleScene
An abstract scene class.
Do not copy this file as a template for your scenes. Instead, your scenes will extend this class.
See templates/SceneTemplate.lua for a blank scene that you can copy and modify for your own scenes.
If you are using NobleEngine-ProjectTemplate,
see scenes/ExampleScene.lua
for an implementation example.
Usage
YourSceneName = {} class("YourSceneName").extends(NobleScene) local scene = YourSceneName
Properties
- noblescene.name
-
The name of this scene. Optional.
If you do not set this value, it will take on the scene's
className
. - noblescene.backgroundColor
- This is the background color of this scene.
Tables
- noblescene.inputHandler
-
All scenes have a default inputHandler which is made active when the scene starts.
If you do not define your scene's inputHandler, it is
nil
and input is disabled when this scene starts.See
Usage
YourSceneName.inputHandler = { AButtonDown = function() // Your code here end, AButtonHold = function() // Your code here end, -- ... -- ... } -- OR... -- Use a non-scene-specific inputHandler, defined elsewhere. YourSceneName.inputHandler = somePreviouslyDefinedInputHandler -- OR... -- Reuse another scene's inputHandler. YourSceneName.inputHandler = SomeOtherSceneName.inputHandler
- noblescene.sprites
-
When you add a sprite to your scene, it is put in this table so the scene can keep track of it.
This is intended as
read-only
. You should not modify this table directly.See
Methods
- noblescene:addSprite(__sprite)
-
Use this to add sprites to your scene instead of
playdate.graphics.sprite:add()
.If your sprite is a NobleSprite, using
NobleSprite:add()
will also call this method.Sprites added with this method that are tracked by the scene. Any not manually removed before transitioning to another scene are automatically removed in finish.
Parameters
- __sprite
playdate.graphics.sprite
The sprite to add to the scene.
See
- __sprite
playdate.graphics.sprite
- noblescene:removeSprite(__sprite)
-
Use this to remove sprites from your scene instead of
playdate.graphics.sprite:remove()
.If your sprite is a NobleSprite, using
NobleSprite:remove()
will also call this method.Sprites not manually removed before transitioning to another scene are automatically removed in finish.
Parameters
- __sprite
playdate.graphics.sprite
The sprite to add to the scene.
See
- __sprite
playdate.graphics.sprite
Callbacks
- noblescene:init()
-
Implement this in your scene if you have code to run when your scene's object is created.
Usage
function YourSceneName:init() YourSceneName.super.init(self) --[Your code here]-- end
- noblescene:enter()
-
Implement if you want to run code as the transition to this scene begins, such as UI animation, triggers, etc.
Usage
function YourSceneName:enter() YourSceneName.super.enter(self) --[Your code here]-- end
- noblescene:start()
-
Implement if you have code to run once the transition to this scene is complete. This method signifies the full activation of a scene. If this scene's inputHandler is defined, it is enabled now.
See
Usage
function YourSceneName:start() YourSceneName.super.start(self) --[Your code here]-- end
- noblescene:update()
-
Implement to run scene-specific code on every frame while this scene is active.
NOTE: you may use coroutine.yield() here, because it only runs inside of playdate.update(), which is a coroutine.
Usage
function YourSceneName:update() YourSceneName.super.update(self) --[Your code here]-- end
- noblescene:drawBackground(__x, __y, __width, __height)
-
Implement this function to draw background visual elements in your scene.
This runs when the engine need to redraw a background area.
By default it runs every frame and fills the background with self.backgroundColor. All arguments are optional.
Use
Graphics.sprite.setAlwaysRedraw(false)
afterNoble.new()
to optimize partial redraw.Parameters
- __x
- __y
- __width
- __height
Usage
function YourSceneName:drawBackground(__x, __y, __width, __height) YourSceneName.super.drawBackground(self) -- optional, invokes default behavior. --[Your code here]-- end
- __x
- noblescene:exit()
-
Implement this in your scene if you have "goodbye" code to run when a transition to another scene
begins, such as UI animation, saving to disk, etc.
Usage
function YourSceneName:exit() YourSceneName.super.exit(self) --[Your code here]-- end
- noblescene:finish()
-
Implement this in your scene if you have code to run when a transition to another scene
is complete, such as resetting variables.
Usage
function YourSceneName:finish() YourSceneName.super.finish(self) --[Your code here]-- end
- noblescene:pause()
-
pause()
/resume()
Implement one or both of these in your scene if you want something to happen when the game is paused/unpaused by the system. The Playdate SDK does not require you to write pause logic, but these are useful if you want a custom menu image (see Playdate SDK for more details), want to obscure game elements to prevent players from cheating in a time-sensitive game, want to count the number of times the player pauses the game, etc.
Usage
function YourSceneName:pause() YourSceneName.super.pause(self) --[Your code here]-- end
- noblescene:resume()
-
Usage
function YourSceneName:resume() YourSceneName.super.resume(self) --[Your code here]-- end