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ámetroTipoDescripción
xfloatLa x del punto, en píxeles del mundo
yfloatLa y del punto, en píxeles del mundo
radiusfloatA qué distancia del punto, en píxeles. 0 encuentra lo que está justo encima
*componentsstrNombres de componentes que una entidad debe tener todos, como en world.all()
withouttupleNombres 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.inf encuentra 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.