pyxen.world.near()
Las entidades dentro de un radio alrededor de un punto, la más cercana primero.
world.near(x, y, radius, *components, without=None)
Devuelve las entidades cuya posición está a radius o menos de (x, y), la más cercana primero. Dos a la misma distancia vienen siempre en el mismo orden. Los componentes y without funcionan como en world.all(); sin componentes, cuenta cualquier entidad.
Es rápido con muchas entidades: Pyxen las guarda en una cuadrícula por posición y solo mira donde está el círculo, así que un disparo que pide los enemigos cercanos cuesta más o menos lo mismo con 50 enemigos que con 5000.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
x | float | La x del punto, en píxeles del mundo |
y | float | La y del punto, en píxeles del mundo |
radius | float | A qué distancia del punto, en píxeles. 0 encuentra lo que está justo encima |
*components | str | Nombres de componentes que una entidad debe tener todos, como en world.all() |
without | tuple | Nombres de componentes que una entidad no debe tener |
Un disparo que acierta
Cada disparo daña a los enemigos que toca, sin comprobar todos los enemigos del juego:
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 enemigo destruido aquí nunca vuelve a aparecer, ni para este disparo ni para el siguiente.
Apuntado automático
La primera entidad es la más cercana, así que next la toma, o None cuando no hay ninguna al alcance:
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)
Una torre elige su objetivo de la misma forma, desde su propia posición y su alcance.
Posiciones
La distancia se mide entre el punto y la posición de cada entidad en el mundo: su x y su y, a través de las posiciones, rotaciones y escalas de sus padres, donde se dibuja. Para las entidades en la raíz, o bajo un padre en (0, 0) que no gira ni cambia de escala (los enemigos de un nivel, como es habitual), son su x y su y.
Una posición escrita antes en el mismo fotograma se ve enseguida: mueve un disparo y luego pregunta qué hay cerca de él.
Casos límite
- Un radio negativo no encuentra nada.
math.infencuentra todas las entidades, la más cercana primero. - El resultado dice dónde estaban las cosas cuando se preguntó: vuelve a preguntar después de que se muevan.