Saltar al contenido
Docs

Servicio camara

Referencia del servicio camara. La cámara de cada jugador: la vista (tercera persona, primera persona, 2D, isométrica), distancia, inclinación, a quién sigue y tomas temporales.

Corresponde aFormato 1, API 1 Para quien escribe código Esta página se genera desde las fuentes del SDK.

En esta página

La cámara es de cada jugador. Por defecto: tercera persona, orbital, se acomoda sola detrás del avatar y se acerca si una pieza tapa la vista.

Los tipos que aparecen en las firmas (Vec3, Texto, el selector) están en la referencia de la API.

Funciones y propiedades de camara#

camara.fijar#

ts
camara.fijar(ajustes: {
  distancia?: number;         // 2 a 60; por defecto 10
  inclinacion?: number;       // grados sobre el horizonte, -10 a 89 (89: vista desde arriba); por defecto 22
  giro?: number;              // grados; 0 mira hacia +Z. Coloca la cámara ahí una vez
  libre?: boolean;            // false: el jugador no puede girarla
  giroAutomatico?: boolean;   // false: no se acomoda sola detrás del avatar
  evitarObstaculos?: boolean; // false: no se acerca cuando algo tapa la vista
  campo?: number;             // campo de visión, 30 a 100
  seguir?: Jugador | Actor | Pieza | Vec3 | null;   // a quién sigue; null vuelve al propio jugador
}, para?: Jugador): void

Cambia los ajustes de la cámara de un jugador (o de todos). Solo cambia lo que se indique.

De docs/EJEMPLOS.md, «camara»:

ts
// Puzle visto desde arriba: camara fija, el jugador no la gira.
camara.fijar({ inclinacion: 70, distancia: 24, giro: 0, libre: false });

camara.toma#

ts
camara.toma(def: { desde: Vec3; hacia: Vec3 | Jugador | Actor | Pieza; duracion: number; campo?: number }, para?: Jugador): void

Toma temporal: la cámara va a desde, mira a hacia durante duracion segundos y vuelve sola.

De docs/EJEMPLOS.md, «camara»:

ts
// Toma de dos segundos al abrirse la puerta; despues vuelve sola.
mundo.alTocar('palanca', () => camara.toma({ desde: [0, 6, -8], hacia: mundo.pieza('puerta'), duracion: 2 }));

camara.restablecer#

ts
camara.restablecer(para?: Jugador): void

Vuelve a la cámara por defecto.

camara.vista#

ts
camara.vista(def: VistaDef | TipoVista | null, opciones?: { transicion?: number }, para?: Jugador): void

Cambia el tipo de vista y de control de un jugador (o de todos): camara.vista('lateral') o camara.vista({ tipo: 'isometrica', zoom: 14 }). La cámara pasa a la vista nueva en transicion segundos (por defecto 0,6). Con null vuelve la vista de la escena.

De games/valle-abierto/scripts/principal.ts:

ts
camara.vista(e.tercera ? { tipo: 'tercera-persona', distancia: 7 } : 'primera-persona', { transicion: 0.4 }, j);

Notas de comportamiento#

  • Vista elevada fija para un puzle: camara.fijar({ inclinacion: 70, distancia: 24, giro: 0, libre: false }).
  • camara.toma es temporal: la cámara va a desde, mira a hacia durante duracion segundos y vuelve sola.
  • Los controles siguen siendo relativos a la cámara: con la cámara fija, "adelante" es siempre la misma dirección.

Ejemplos completos#

Scripts completos de docs/EJEMPLOS.md. Cada uno supone una escena con lo que nombra, y las claves de texto (interfaz.t('...')) deben existir en textos de juego.json.

camara#

scripts/principal.ts
import { camara, juego, jugadores, mundo } from '@greengames/sdk';

juego.alIniciar(() => {
  // Puzle visto desde arriba: camara fija, el jugador no la gira.
  camara.fijar({ inclinacion: 70, distancia: 24, giro: 0, libre: false });

  // Toma de dos segundos al abrirse la puerta; despues vuelve sola.
  mundo.alTocar('palanca', () => camara.toma({ desde: [0, 6, -8], hacia: mundo.pieza('puerta'), duracion: 2 }));

  // Repeticion de un gol: todos miran la pelota tres segundos y vuelven a su avatar.
  mundo.alChocar('pelota', (pelota, otra) => {
    if (!otra.tiene('arco')) return;
    camara.fijar({ seguir: pelota, distancia: 6 });
    for (const j of jugadores.todos()) j.congelado = true;
  });
});

Sigue con#