pyxen.world.near()
Les entités dans un rayon autour d’un point, la plus proche d’abord.
world.near(x, y, radius, *components, without=None)
Renvoie les entités dont la position est à radius ou moins de (x, y), la plus proche d’abord. Deux à la même distance viennent toujours dans le même ordre. Les composants et without fonctionnent comme dans world.all() ; sans composant, toutes les entités comptent.
C’est rapide avec beaucoup d’entités : Pyxen les range dans une grille par position et ne regarde que là où est le cercle, si bien qu’un tir qui demande les ennemis proches coûte à peu près autant avec 50 ennemis qu’avec 5000.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
x | float | Le x du point, en pixels du monde |
y | float | Le y du point, en pixels du monde |
radius | float | La distance au point, en pixels. 0 trouve ce qui est posé dessus |
*components | str | Les noms de composants qu’une entité doit tous avoir, comme dans world.all() |
without | tuple | Les noms de composants qu’une entité ne doit pas avoir |
Un tir qui touche
Chaque tir blesse les ennemis qu’il touche, sans tester tous les ennemis du jeu :
for shot in world.all("shot"):
for foe in world.near(shot.x, shot.y, 10, "foe"):
foe.foe.hp -= 1
if foe.foe.hp <= 0:
world.destroy(foe)
Un ennemi détruit ici n’est plus jamais trouvé, ni par ce tir ni par le suivant.
Visée automatique
La première entité est la plus proche : next la prend, ou None quand aucune n’est à portée :
hero = world.get(name="hero")
target = next(world.near(hero.x, hero.y, 120, "foe", without=("dead",)), None)
if target is not None:
fire_at(target.x, target.y)
Une tour choisit sa cible de la même façon, depuis sa propre position et sa portée.
Positions
La distance se mesure entre le point et la position de chaque entité dans le monde : son x et son y, à travers les positions, rotations et échelles de ses parents, là où elle est dessinée. Pour les entités à la racine, ou sous un parent en (0, 0) qui ne tourne ni ne change d’échelle (les ennemis d’un niveau, comme d’habitude), ce sont leurs x et y.
Une position écrite plus tôt dans la même image est vue tout de suite : déplacez un tir, puis demandez ce qui est près de lui.
Cas particuliers
- Un rayon négatif ne trouve rien.
math.inftrouve toutes les entités, la plus proche d’abord. - Le résultat dit où étaient les choses au moment de la demande : redemandez après qu’elles ont bougé.