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#
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): voidCambia los ajustes de la cámara de un jugador (o de todos). Solo cambia lo que se indique.
De docs/EJEMPLOS.md, «camara»:
// Puzle visto desde arriba: camara fija, el jugador no la gira.
camara.fijar({ inclinacion: 70, distancia: 24, giro: 0, libre: false });camara.toma#
camara.toma(def: { desde: Vec3; hacia: Vec3 | Jugador | Actor | Pieza; duracion: number; campo?: number }, para?: Jugador): voidToma temporal: la cámara va a desde, mira a hacia durante duracion segundos y vuelve sola.
De docs/EJEMPLOS.md, «camara»:
// 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#
camara.restablecer(para?: Jugador): voidVuelve a la cámara por defecto.
camara.vista#
camara.vista(def: VistaDef | TipoVista | null, opciones?: { transicion?: number }, para?: Jugador): voidCambia 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:
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.tomaes temporal: la cámara va adesde, mira ahaciaduranteduracionsegundos 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#
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#
- Referencia de la API: los once servicios y los tipos comunes.
- Scripts: las reglas de un script y cómo corre dentro de la sala.