GSH Docs v0.1

Escribir juegos / Actores

Actores y física

En GSH lo que se ve y lo que choca casi nunca son el mismo objeto. El sprite pinta. El collider ocupa espacio. spawn los mete a la escena.

Constructores

ConstructorUso
Sprite(x, y, w, h, tex, capa, frames, cols, rot)Imagen, opcionalmente animada.
Collider(x, y, w, h, debug)Hitbox AABB.
ColorRect, Circle, Triangle, PentagonFormas de color.
Text, TextBox, TextEditTexto y campos.
CoreButtonBotón nativo del motor.

Campos que vas a tocar todo el tiempo: x, y, width, height, layer, visible, rotation, frame.

spawn

Hasta que no hay spawn, el objeto existe en el script pero el runtime no lo dibuja ni lo usa en física. Puedes pasar uno o una lista.

gsh

var n = Sprite(40, 80, 64, 64, tex, 8, 1, 1, 0)
spawn(n)
spawn([a, b, c])

Capas

La cola de dibujo ordena por capa. El mundo suele vivir en 0–20. El HUD se pone en 100 o más y, si no quieres que lo mueva la cámara, fíjalo a la vista (el demo de menú hace exactamente eso).

El patrón sprite + collider

Si mueves solo el sprite, el golpe queda atrás. Si mueves solo el collider, el gráfico se queda. Physics.move_and_slide mueve los dos y resbala contra sólidos.

gsh

Physics.add_solid(muro.caja)
Physics.move_and_slide(jugador.grafico, jugador.caja, 0, 0, dx, dy)

Los últimos números son offset sprite–hitbox. En un tanque o un personaje con sombra, el dibujo no coincide con la caja; ahí sirve el offset. Hay una variante que recibe una lista de colliders a ignorar (proyectiles, el propio jugador, etc.).

Sólidos add_solid registra obstáculos. Sin eso, move_and_slide no tiene contra qué rebotar. Los enemigos que persiguen suelen pasar el collider del jugador como objetivo, no el sprite.

Colisión a mano

Para balas o triggers a veces basta AABB sin el sistema de sólidos:

gsh

if Physics.is_colliding(hit_a, hit_b):
    aplicar_golpe()

# o con rectángulos sueltos
Physics.check_collision(x1, y1, w1, h1, x2, y2, w2, h2)

Cámara

En un mapa chico no hace falta. En uno grande, Camera.follow al jugador y Camera.set_zoom. El ratón de mundo no es el de pantalla: usa Camera.get_mouse_x() / get_mouse_y() si apuntas en un escenario con scroll.

Assets

Las rutas de imagen y audio son relativas a la carpeta del proyecto abierto.

gsh

var tex = Graphics.load_image("assets/nave.png")

Las texturas no suben a GPU hasta que hay contexto gráfico. En la práctica: carga en start o al crear el actor, no asumas que un handle es válido antes de spawnear.