pxt-common-packages
Version:
Microsoft MakeCode (PXT) common packages
94 lines (80 loc) • 3.31 kB
Markdown
# on Overlap Tile
Run some code when a sprite overlaps a kind of tile
```sig
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](/types/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 #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.
```blocks
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
})
```
## See also #seealso
[is hitting tile](/reference/sprites/sprite/is-hitting-tile),
[tile kind at](/reference/sprites/sprite/tile-kind-at),
[overlaps with](/reference/sprites/sprite/overlaps-with),
[set flag](/reference/sprites/sprite/set-flag)