Sensors
Contents
Sensors#
Tokens have sensors, with which they can sense their environment and can e.g. detect other tokens at their position.
Detect an object#
A token
can track another token
at the same location by using the
function on_detect_token
.
@player.register
def on_detect_token(self, other):
print("Damage!!!!!")
self.remove()
What happens here?#
The function
on_detect_token
will be called when the token detects another object at the same location.The parameter
other
is a reference to the found object, so that so that you can directly access attributes and methods of this object (e.g. withother.move()
)
Compare with found object#
Often an action should only be executed if a certain object is found. is found.
This goes for example like this:
1@player1.register
2def on_detect_token(self, other):
3 global player2
4 if other == player2:
5 print("I found you, player2!")
The comparison in line 6 checks whether the object is the same object
as player2
.
Note
Excursus: Global Variables: Normally variables are only known only known within a method, e.g. to prevent side-effects when the same side effects when accessing the same variable in different places. variable in different places.
The approach with which variables from other program parts are accessed here is is simple and intuitive - but later you will try to avoid it. try to avoid this.
Extensive example#
The following code shows how you can prevent objects from moving through walls:
from miniworldmaker import *
board = TiledBoard()
board.columns = 8
board.rows = 2
board.speed = 30
player = token()
player.add_costume("images/player_1.png")
wall = token((4,0))
wall.add_costume("images/wall.png")
@player.register
def act(self):
if player.position != (0,4):
player.direction = "right"
player.move()
@player.register
def on_detect_token(self, other):
if other==wall:
self.move_back()
board.run()
Other sensors#
Check boundaries of the playing field#
You can also check if a character is at the borders of the playing field (or beyond). playing field (or beyond it):
Is the piece not on the playing field?###.#
@player3.register
def on_detecting_not_on_board(self):
print("Warning: I'm not on the board!!!")
Example:
The following program simulates a fish swimming around:
from miniworldmaker import *
board=TiledBoard()
board.columns = 4
board.rows = 1
board.add_background("images/water.png")
fish = token((0,0))
fish.add_costume("images/fish.png")
fish.costume.orientation = - 90
fish.direction = "right
@fish.register
def act(self):
self.move()
@fish.register
def on_detecting_not_on_board(self):
self.move_back()
self.flip_x()
board.run()
Is the character at the boundaries of the playing field?
@player4.register
def on_detecting_borders(self, borders):
print("Borders are here!", str(borders))
If a character is at the position (0,0) the following is printed: Borders are here! is printed:
Borders are here! [‘right’, ‘top’]`
FAQ#
My collisions are not detected, what can I do?
First test if the method is called at all, e.g. with:
``python @player.register def on_detect_token(self, token): print(token) …
If the `print` statement is not called, then the sensor does not work. the sensor does not work.