on Overlap Tile
Run some code when a sprite overlaps a kind of tile
scene.onOverlapTile(0, 0, function (sprite) {
})
You can detect when a moving sprite contacts a tile in the scene. If your sprite touches a tile with the specified image, you can run some code. You pick both the sprite kind to check for and what type of tile it will hit.
When the tile overlap is detected the sprite of the kind you asked for is given to you in the sprite parameter of handler. The tile location is give in the tile parameter.
A sprite overlapping a tile is dectected when the outside edges of their images make contact. If a sprite has it’s ghost
flag set, any contact with the tile is ignored.
Parameters
- kind: the type of sprite to check for overlapping.
- image: the image of the tile to check for an overlap against.
- handler: the code to run when the sprite makes contact.
- sprite: the sprite that overlapped the tile.
- tile: the tile location that was overlapped.
Example
Build a brick wall of tiles in the scene. Use the A to send a Ghost
sprite toward the wall and watch it stop. When button B is pressed, switch the value of the ghost
flag and see if the ghost sprite hits the wall or goes through.
enum SpriteKind {
Ghost,
Ball
}
let ghost: Sprite = null
scene.setTile(2, img`
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 2 f 2 1
1 2 2 f 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 2 2 2 2 f 2 2 2 2 2 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 f 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 2 2 f 2 2 2 f 2 2 2 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 f 2 2 2 2 2 2 2 2 f 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 2 2 2 2 f 2 2 2 2 f 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
`, true)
// TODO tiles.setTilemap(tiles.createTilemap(null, 0, 8 ** 8, 9));
ghost = sprites.create(img`
. . . . . . d d d d d . . . . .
. . . d d d d 1 1 1 d d d . . .
. . d d 1 1 1 1 1 1 1 1 d d . .
. . d 1 1 1 1 1 1 1 1 1 1 d . .
. . d 1 1 1 1 1 1 1 1 1 1 d d .
. d d 1 1 1 f 1 1 1 f 1 1 1 d .
. d 1 1 1 1 1 1 1 1 1 1 1 1 d d
. d 1 1 1 1 1 1 1 1 1 1 1 1 1 d
. d 1 1 1 1 1 1 1 1 1 1 1 1 1 d
d d 1 1 1 1 1 1 f f 1 1 1 1 1 d
d 1 1 1 1 1 1 1 f f 1 1 1 1 1 d
d 1 1 1 1 1 1 1 1 1 1 1 1 1 1 d
d 1 1 1 1 1 1 1 d 1 1 1 1 1 1 d
d 1 d d d 1 1 d d d d 1 d 1 1 d
d d d . d d d d . . d d d d d d
d d . . . d d . . . . d . . d d
`, SpriteKind.Ghost)
ghost.right = scene.screenWidth() - 1
scene.onHitTile(SpriteKind.Ghost, 2, function (sprite) {
sprite.say("Ouch!", 200)
})
controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
ghost.setFlag(SpriteFlag.Ghost, false)
ghost.right = scene.screenWidth() - 1
ghost.vx = - 100
})
controller.B.onEvent(ControllerButtonEvent.Pressed, function () {
ghost.setFlag(SpriteFlag.Ghost, true)
ghost.right = scene.screenWidth() - 1
ghost.vx = - 100
})