q5 3.7.5 → 3.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/defs/q5-c2d-es.d.ts +3223 -52
- package/defs/q5-c2d.d.ts +10 -26
- package/defs/q5-es.d.ts +3472 -59
- package/deno.json +1 -1
- package/package.json +1 -1
- package/q5.d.ts +10 -26
- package/q5.js +286 -7
- package/q5.min.js +1 -1
package/defs/q5-c2d-es.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ declare global {
|
|
|
5
5
|
/**
|
|
6
6
|
* Bienvenido a la documentación de q5! 🤩
|
|
7
7
|
*
|
|
8
|
-
* ¿Primera vez programando? Revisa la [guía para principiantes de q5].
|
|
8
|
+
* ¿Primera vez programando? Revisa la [guía para principiantes de q5](https://github.com/q5js/q5.js/wiki/q5-Beginner's-Brief).
|
|
9
9
|
*
|
|
10
10
|
* En estas páginas de "Aprender" puedes experimentar editando los mini ejemplos. ¡Diviértete! 😎
|
|
11
11
|
*/
|
|
@@ -21,11 +21,21 @@ declare global {
|
|
|
21
21
|
* @param {number} [alto] alto del lienzo en píxeles
|
|
22
22
|
* @param {object} [opciones] opciones para el contexto 2d
|
|
23
23
|
* @return {Promise<HTMLCanvasElement>} una promesa que se resuelve con el elemento canvas creado
|
|
24
|
+
* @example
|
|
25
|
+
* // Canvas2D
|
|
26
|
+
* crearLienzo(200, 100);
|
|
27
|
+
* fondo('silver');
|
|
28
|
+
* círculo(0, 0, 80);
|
|
24
29
|
*/
|
|
25
|
-
function crearLienzo(ancho?: number, alto?: number, opciones
|
|
30
|
+
function crearLienzo(ancho?: number, alto?: number, opciones?: CanvasRenderingContext2DSettings): Promise<HTMLCanvasElement>;
|
|
26
31
|
|
|
27
32
|
/** ⭐
|
|
28
33
|
* Función a declarar. Se ejecutará 60 veces por segundo de forma predeterminada. Tiene comportamiento de bucle, lo que permite hacer animaciones cuadro a cuadro.
|
|
34
|
+
* @example
|
|
35
|
+
* function dibujar() {
|
|
36
|
+
* fondo('silver');
|
|
37
|
+
* círculo(ratónX, ratónY, 80);
|
|
38
|
+
* }
|
|
29
39
|
*/
|
|
30
40
|
function dibujar(): void;
|
|
31
41
|
|
|
@@ -34,8 +44,13 @@ declare global {
|
|
|
34
44
|
*
|
|
35
45
|
* Para acceder a las herramientas del navegador (DevTools) generalmente es con click derecho + "inspeccionar", o presionando las teclas `ctrl + shift + i` o `command + option + i`. La consola se encuentra en la pestaña "console".
|
|
36
46
|
* @param {any} mensaje a imprimir
|
|
47
|
+
* @example
|
|
48
|
+
* function dibujar() {
|
|
49
|
+
* círculo(ratónX, ratónY, 80);
|
|
50
|
+
* log('El ratón está en:', ratónX, ratónY);
|
|
51
|
+
* }
|
|
37
52
|
*/
|
|
38
|
-
function log(
|
|
53
|
+
function log(mensaje: any): void;
|
|
39
54
|
|
|
40
55
|
// 🧑🎨 shapes
|
|
41
56
|
|
|
@@ -44,89 +59,3245 @@ declare global {
|
|
|
44
59
|
* @param {number} x posición x del centro del círculo
|
|
45
60
|
* @param {number} y posición y del centro del círculo
|
|
46
61
|
* @param {number} diámetro del círculo
|
|
62
|
+
* @example
|
|
63
|
+
* crearLienzo(200, 100);
|
|
64
|
+
* círculo(100, 50, 80);
|
|
47
65
|
*/
|
|
48
66
|
function círculo(): void;
|
|
49
67
|
|
|
68
|
+
/** 🧑🎨
|
|
69
|
+
* Dibuja una elipse.
|
|
70
|
+
* @param {number} x posición x
|
|
71
|
+
* @param {number} y posición y
|
|
72
|
+
* @param {number} ancho ancho de la elipse
|
|
73
|
+
* @param {number} [alto] alto de la elipse
|
|
74
|
+
* @example
|
|
75
|
+
* crearLienzo(200, 100);
|
|
76
|
+
* elipse(100, 50, 160, 80);
|
|
77
|
+
*/
|
|
78
|
+
function elipse(x: number, y: number, ancho: number, alto?: number): void;
|
|
79
|
+
|
|
80
|
+
/** 🧑🎨
|
|
81
|
+
* Dibuja un rectángulo o un rectángulo redondeado.
|
|
82
|
+
* @param {number} x posición x
|
|
83
|
+
* @param {number} y posición y
|
|
84
|
+
* @param {number} w ancho del rectángulo
|
|
85
|
+
* @param {number} [h] alto del rectángulo
|
|
86
|
+
* @param {number} [redondeado] radio para todas las esquinas
|
|
87
|
+
* @example
|
|
88
|
+
* crearLienzo(200);
|
|
89
|
+
* fondo(200);
|
|
90
|
+
*
|
|
91
|
+
* rect(30, 20, 40, 60);
|
|
92
|
+
* rect(80, 70, 40, 60, 10);
|
|
93
|
+
* rect(130, 120, 40, 60, 30, 2, 8, 20);
|
|
94
|
+
*/
|
|
95
|
+
function rect(x: number, y: number, ancho: number, alto?: number, redondeado?: number): void;
|
|
96
|
+
|
|
97
|
+
/** 🧑🎨
|
|
98
|
+
* Dibuja un cuadrado o un cuadrado redondeado.
|
|
99
|
+
* @param {number} x posición x
|
|
100
|
+
* @param {number} y posición y
|
|
101
|
+
* @param {number} tamaño tamaño de los lados del cuadrado
|
|
102
|
+
* @param {number} [redondeado] radio para todas las esquinas
|
|
103
|
+
* @example
|
|
104
|
+
* crearLienzo(200);
|
|
105
|
+
* fondo(200);
|
|
106
|
+
*
|
|
107
|
+
* cuadrado(30, 30, 40);
|
|
108
|
+
* cuadrado(80, 80, 40, 10);
|
|
109
|
+
* cuadrado(130, 130, 40, 30, 2, 8, 20);
|
|
110
|
+
*/
|
|
111
|
+
function cuadrado(x: number, y: number, tamaño: number, redondeado?: number): void;
|
|
112
|
+
|
|
113
|
+
/** 🧑🎨
|
|
114
|
+
* Dibuja un punto en el lienzo.
|
|
115
|
+
* @param {number} x posición x
|
|
116
|
+
* @param {number} y posición y
|
|
117
|
+
* @example
|
|
118
|
+
* crearLienzo(200, 100);
|
|
119
|
+
* trazo('white');
|
|
120
|
+
* punto(75, 50);
|
|
121
|
+
*
|
|
122
|
+
* grosorTrazo(10);
|
|
123
|
+
* punto(125, 50);
|
|
124
|
+
*/
|
|
125
|
+
function punto(x: number, y: number): void;
|
|
126
|
+
|
|
127
|
+
/** 🧑🎨
|
|
128
|
+
* Dibuja una línea en el lienzo.
|
|
129
|
+
* @param {number} x1 posición x del primer punto
|
|
130
|
+
* @param {number} y1 posición y del primer punto
|
|
131
|
+
* @param {number} x2 posición x del segundo punto
|
|
132
|
+
* @param {number} y2 posición y del segundo punto
|
|
133
|
+
* @example
|
|
134
|
+
* crearLienzo(200, 100);
|
|
135
|
+
* trazo('lime');
|
|
136
|
+
* línea(20, 20, 180, 80);
|
|
137
|
+
*/
|
|
138
|
+
function línea(): void;
|
|
139
|
+
|
|
140
|
+
/** 🧑🎨
|
|
141
|
+
* Dibuja una cápsula.
|
|
142
|
+
* @param {number} x1 posición x del primer punto
|
|
143
|
+
* @param {number} y1 posición y del primer punto
|
|
144
|
+
* @param {number} x2 posición x del segundo punto
|
|
145
|
+
* @param {number} y2 posición y del segundo punto
|
|
146
|
+
* @param {number} r radio de los extremos semicirculares de la cápsula
|
|
147
|
+
* @example
|
|
148
|
+
* crearLienzo(200, 100);
|
|
149
|
+
* fondo(200);
|
|
150
|
+
* grosorTrazo(5);
|
|
151
|
+
* cápsula(40, 40, 160, 60, 10);
|
|
152
|
+
* @example
|
|
153
|
+
* function dibujar() {
|
|
154
|
+
* fondo(200);
|
|
155
|
+
* relleno('cyan');
|
|
156
|
+
* grosorTrazo(10);
|
|
157
|
+
* cápsula(100, 100, ratónX, ratónY, 20);
|
|
158
|
+
* }
|
|
159
|
+
*/
|
|
160
|
+
function cápsula(): void;
|
|
161
|
+
|
|
162
|
+
/** 🧑🎨
|
|
163
|
+
* Establecer a `ESQUINA` (por defecto), `CENTRO`, `RADIO`, o `ESQUINAS`.
|
|
164
|
+
*
|
|
165
|
+
* Cambia cómo se interpretan las primeras cuatro entradas para
|
|
166
|
+
* `rect` y `cuadrado`.
|
|
167
|
+
* @param {string} modo
|
|
168
|
+
* @example
|
|
169
|
+
* crearLienzo(200, 100);
|
|
170
|
+
* fondo(200);
|
|
171
|
+
* modoRect(ESQUINA);
|
|
172
|
+
*
|
|
173
|
+
* // ( x, y, w, h)
|
|
174
|
+
* rect(50, 25, 100, 50);
|
|
175
|
+
* @example
|
|
176
|
+
* crearLienzo(200, 100);
|
|
177
|
+
* fondo(200);
|
|
178
|
+
* modoRect(CENTRO);
|
|
179
|
+
*
|
|
180
|
+
* // ( cX, cY, w, h)
|
|
181
|
+
* rect(100, 50, 100, 50);
|
|
182
|
+
* @example
|
|
183
|
+
* crearLienzo(200, 100);
|
|
184
|
+
* fondo(200);
|
|
185
|
+
* modoRect(RADIO);
|
|
186
|
+
*
|
|
187
|
+
* // ( cX, cY, rX, rY)
|
|
188
|
+
* rect(100, 50, 50, 25);
|
|
189
|
+
* @example
|
|
190
|
+
* crearLienzo(200, 100);
|
|
191
|
+
* fondo(200);
|
|
192
|
+
* modoRect(ESQUINAS);
|
|
193
|
+
*
|
|
194
|
+
* // ( x1, y1, x2, y2)
|
|
195
|
+
* rect(50, 25, 150, 75);
|
|
196
|
+
*/
|
|
197
|
+
function modoRect(modo: string): void;
|
|
198
|
+
|
|
199
|
+
/** 🧑🎨
|
|
200
|
+
* Establecer a `CENTRO` (por defecto), `RADIO`, `ESQUINA`, o `ESQUINAS`.
|
|
201
|
+
*
|
|
202
|
+
* Cambia cómo se interpretan las primeras cuatro entradas para
|
|
203
|
+
* `elipse`, `círculo`, y `arco`.
|
|
204
|
+
* @param {string} modo
|
|
205
|
+
* @example
|
|
206
|
+
* crearLienzo(200, 100);
|
|
207
|
+
* fondo(200);
|
|
208
|
+
* modoEliptico(CENTRO);
|
|
209
|
+
*
|
|
210
|
+
* // ( x, y, w, h)
|
|
211
|
+
* elipse(100, 50, 100, 50);
|
|
212
|
+
* @example
|
|
213
|
+
* crearLienzo(200, 100);
|
|
214
|
+
* fondo(200);
|
|
215
|
+
* modoEliptico(RADIO);
|
|
216
|
+
*
|
|
217
|
+
* // ( x, y, rX, rY)
|
|
218
|
+
* elipse(100, 50, 50, 25);
|
|
219
|
+
* @example
|
|
220
|
+
* crearLienzo(200, 100);
|
|
221
|
+
* fondo(200);
|
|
222
|
+
* modoEliptico(ESQUINA);
|
|
223
|
+
*
|
|
224
|
+
* // (lX, tY, w, h)
|
|
225
|
+
* elipse(50, 25, 100, 50);
|
|
226
|
+
* @example
|
|
227
|
+
* crearLienzo(200, 100);
|
|
228
|
+
* fondo(200);
|
|
229
|
+
* modoEliptico(ESQUINAS);
|
|
230
|
+
*
|
|
231
|
+
* // ( x1, y1, x2, y2)
|
|
232
|
+
* elipse(50, 25, 150, 75);
|
|
233
|
+
*/
|
|
234
|
+
function modoEliptico(modo: string): void;
|
|
235
|
+
|
|
236
|
+
/** 🧑🎨
|
|
237
|
+
* Modo de alineación de forma, para usar en `modoRect` y `modoEliptico`.
|
|
238
|
+
*/
|
|
239
|
+
const ESQUINA: 'corner';
|
|
240
|
+
|
|
241
|
+
/** 🧑🎨
|
|
242
|
+
* Modo de alineación de forma, para usar en `modoRect` y `modoEliptico`.
|
|
243
|
+
*/
|
|
244
|
+
const RADIO: 'radius';
|
|
245
|
+
|
|
246
|
+
/** 🧑🎨
|
|
247
|
+
* Modo de alineación de forma, para usar en `modoRect` y `modoEliptico`.
|
|
248
|
+
*/
|
|
249
|
+
const ESQUINAS: 'corners';
|
|
250
|
+
|
|
251
|
+
// 🌆 image
|
|
252
|
+
|
|
253
|
+
/** 🌆
|
|
254
|
+
* Carga una imagen desde una URL.
|
|
255
|
+
*
|
|
256
|
+
* Por defecto, los recursos se cargan en paralelo antes de que q5 ejecute `dibujar`. Usa `await` para esperar a que una imagen se cargue.
|
|
257
|
+
* @param {string} url url de la imagen a cargar
|
|
258
|
+
* @returns {Q5.Image & PromiseLike<Q5.Image>} imagen
|
|
259
|
+
* @example
|
|
260
|
+
* crearLienzo(200);
|
|
261
|
+
*
|
|
262
|
+
* let logo = cargarImagen('/q5js_logo.avif');
|
|
263
|
+
*
|
|
264
|
+
* function dibujar() {
|
|
265
|
+
* fondo(logo);
|
|
266
|
+
* }
|
|
267
|
+
*/
|
|
268
|
+
function cargarImagen(url: string): Q5.Imagen & PromiseLike<Q5.Imagen>;
|
|
269
|
+
|
|
270
|
+
/** 🌆
|
|
271
|
+
* Dibuja una imagen o fotograma de video en el lienzo.
|
|
272
|
+
* @param {Q5.Image | HTMLVideoElement} img imagen o video a dibujar
|
|
273
|
+
* @param {number} dx posición x donde dibujar la imagen
|
|
274
|
+
* @param {number} dy posición y donde dibujar la imagen
|
|
275
|
+
* @param {number} [dw] ancho de la imagen de destino
|
|
276
|
+
* @param {number} [dh] alto de la imagen de destino
|
|
277
|
+
* @param {number} [sx] posición x en la fuente para empezar a recortar una subsección
|
|
278
|
+
* @param {number} [sy] posición y en la fuente para empezar a recortar una subsección
|
|
279
|
+
* @param {number} [sw] ancho de la subsección de la imagen fuente
|
|
280
|
+
* @param {number} [sh] alto de la subsección de la imagen fuente
|
|
281
|
+
* @example
|
|
282
|
+
* crearLienzo(200);
|
|
283
|
+
*
|
|
284
|
+
* let logo = cargarImagen('/q5js_logo.avif');
|
|
285
|
+
*
|
|
286
|
+
* function dibujar() {
|
|
287
|
+
* imagen(logo, 0, 0, 200, 200);
|
|
288
|
+
* }
|
|
289
|
+
* @example
|
|
290
|
+
* crearLienzo(200);
|
|
291
|
+
*
|
|
292
|
+
* let logo = cargarImagen('/q5js_logo.avif');
|
|
293
|
+
*
|
|
294
|
+
* function dibujar() {
|
|
295
|
+
* imagen(logo, 0, 0, 200, 200, 256, 256, 512, 512);
|
|
296
|
+
* }
|
|
297
|
+
*/
|
|
298
|
+
function imagen(): void;
|
|
299
|
+
|
|
300
|
+
/** 🌆
|
|
301
|
+
* Establecer a `CORNER` (por defecto), `CORNERS`, o `CENTER`.
|
|
302
|
+
*
|
|
303
|
+
* Cambia cómo se interpretan las entradas a `imagen`.
|
|
304
|
+
* @param {string} modo
|
|
305
|
+
* @example
|
|
306
|
+
* crearLienzo(200);
|
|
307
|
+
* let logo = cargarImagen('/q5js_logo.avif');
|
|
308
|
+
*
|
|
309
|
+
* function dibujar() {
|
|
310
|
+
* modoImagen(CORNER);
|
|
311
|
+
*
|
|
312
|
+
* // ( img, x, y, w, h)
|
|
313
|
+
* imagen(logo, 50, 50, 100, 100);
|
|
314
|
+
* }
|
|
315
|
+
* @example
|
|
316
|
+
* crearLienzo(200);
|
|
317
|
+
* let logo = cargarImagen('/q5js_logo.avif');
|
|
318
|
+
*
|
|
319
|
+
* function dibujar() {
|
|
320
|
+
* modoImagen(CENTER);
|
|
321
|
+
*
|
|
322
|
+
* // ( img, cX, cY, w, h)
|
|
323
|
+
* imagen(logo, 100, 100, 100, 100);
|
|
324
|
+
* }
|
|
325
|
+
* @example
|
|
326
|
+
* crearLienzo(200);
|
|
327
|
+
* let logo = cargarImagen('/q5js_logo.avif');
|
|
328
|
+
*
|
|
329
|
+
* function dibujar() {
|
|
330
|
+
* modoImagen(CORNERS);
|
|
331
|
+
*
|
|
332
|
+
* // ( img, x1, y1, x2, y2)
|
|
333
|
+
* imagen(logo, 50, 50, 100, 100);
|
|
334
|
+
* }
|
|
335
|
+
*/
|
|
336
|
+
function modoImagen(modo: string): void;
|
|
337
|
+
|
|
338
|
+
/** 🌆
|
|
339
|
+
* Establece la escala de imagen por defecto, que se aplica a las imágenes cuando
|
|
340
|
+
* se dibujan sin un ancho o alto especificado.
|
|
341
|
+
*
|
|
342
|
+
* Por defecto es 0.5 para que las imágenes aparezcan en su tamaño real
|
|
343
|
+
* cuando la densidad de píxeles es 2. Las imágenes se dibujarán a un tamaño
|
|
344
|
+
* por defecto consistente relativo al lienzo independientemente de la densidad de píxeles.
|
|
345
|
+
*
|
|
346
|
+
* Esta función debe llamarse antes de que se carguen las imágenes para
|
|
347
|
+
* tener efecto.
|
|
348
|
+
* @param {number} escala
|
|
349
|
+
* @returns {number} escala de imagen por defecto
|
|
350
|
+
*/
|
|
351
|
+
function escalaImagenPorDefecto(escala: number): number;
|
|
352
|
+
|
|
353
|
+
/** 🌆
|
|
354
|
+
* Redimensiona la imagen.
|
|
355
|
+
* @param {number} w nuevo ancho
|
|
356
|
+
* @param {number} h nuevo alto
|
|
357
|
+
* @example
|
|
358
|
+
* crearLienzo(200);
|
|
359
|
+
*
|
|
360
|
+
* let logo = cargarImagen('/q5js_logo.avif');
|
|
361
|
+
*
|
|
362
|
+
* function setup() {
|
|
363
|
+
* logo.redimensionar(128, 128);
|
|
364
|
+
* imagen(logo, 0, 0, 200, 200);
|
|
365
|
+
* }
|
|
366
|
+
*/
|
|
367
|
+
function redimensionar(w: number, h: number): void;
|
|
368
|
+
|
|
369
|
+
/** 🌆
|
|
370
|
+
* Devuelve una imagen recortada, eliminando los píxeles transparentes de los bordes.
|
|
371
|
+
* @returns {Q5.Image}
|
|
372
|
+
*/
|
|
373
|
+
function recortar(): Q5.Imagen;
|
|
374
|
+
|
|
375
|
+
/** 🌆
|
|
376
|
+
* Habilita el renderizado suave de imágenes mostradas más grandes que
|
|
377
|
+
* su tamaño real. Esta es la configuración por defecto, así que ejecutar esta
|
|
378
|
+
* función solo tiene efecto si se ha llamado a `noSuavizar`.
|
|
379
|
+
* @example
|
|
380
|
+
* crearLienzo(200);
|
|
381
|
+
*
|
|
382
|
+
* let icono = cargarImagen('/q5js_icon.png');
|
|
383
|
+
*
|
|
384
|
+
* function setup() {
|
|
385
|
+
* imagen(icono, 0, 0, 200, 200);
|
|
386
|
+
* }
|
|
387
|
+
*/
|
|
388
|
+
function suavizar(): void;
|
|
389
|
+
|
|
390
|
+
/** 🌆
|
|
391
|
+
* Deshabilita el renderizado suave de imágenes para un aspecto pixelado.
|
|
392
|
+
* @example
|
|
393
|
+
* crearLienzo(200);
|
|
394
|
+
*
|
|
395
|
+
* let icono = cargarImagen('/q5js_icon.png');
|
|
396
|
+
*
|
|
397
|
+
* function setup() {
|
|
398
|
+
* noSuavizar();
|
|
399
|
+
* imagen(icono, 0, 0, 200, 200);
|
|
400
|
+
* }
|
|
401
|
+
*/
|
|
402
|
+
function noSuavizar(): void;
|
|
403
|
+
|
|
404
|
+
/** 🌆
|
|
405
|
+
* Aplica un tinte (superposición de color) al dibujo.
|
|
406
|
+
*
|
|
407
|
+
* El valor alfa del color de tinte determina la
|
|
408
|
+
* fuerza del tinte. Para cambiar la opacidad de una imagen,
|
|
409
|
+
* usa la función `opacidad`.
|
|
410
|
+
*
|
|
411
|
+
* El teñido afecta a todas las imágenes dibujadas posteriormente. El color de tinte
|
|
412
|
+
* se aplica a las imágenes usando el modo de mezcla "multiply".
|
|
413
|
+
*
|
|
414
|
+
* Dado que el proceso de teñido es intensivo en rendimiento, cada vez
|
|
415
|
+
* que se tiñe una imagen, q5 almacena en caché el resultado. `imagen` dibujará la
|
|
416
|
+
* imagen teñida en caché a menos que el color de tinte haya cambiado o la
|
|
417
|
+
* imagen que se está tiñendo haya sido editada.
|
|
418
|
+
*
|
|
419
|
+
* Si necesitas dibujar una imagen múltiples veces cada fotograma con
|
|
420
|
+
* diferentes tintes, considera hacer copias de la imagen y teñir
|
|
421
|
+
* cada copia por separado.
|
|
422
|
+
* @param {string | number} color color de tinte
|
|
423
|
+
* @example
|
|
424
|
+
* crearLienzo(200);
|
|
425
|
+
*
|
|
426
|
+
* let logo = cargarImagen('/q5js_logo.avif');
|
|
427
|
+
*
|
|
428
|
+
* function setup() {
|
|
429
|
+
* teñir(255, 0, 0, 128);
|
|
430
|
+
* imagen(logo, 0, 0, 200, 200);
|
|
431
|
+
* }
|
|
432
|
+
*/
|
|
433
|
+
function teñir(): void;
|
|
434
|
+
|
|
435
|
+
/** 🌆
|
|
436
|
+
* Las imágenes dibujadas después de ejecutar esta función no serán teñidas.
|
|
437
|
+
*/
|
|
438
|
+
function noTeñir(): void;
|
|
439
|
+
|
|
440
|
+
/** 🌆
|
|
441
|
+
* Enmascara la imagen con otra imagen.
|
|
442
|
+
* @param {Q5.Image} img imagen a usar como máscara
|
|
443
|
+
*/
|
|
444
|
+
function enmascarar(img: Q5.Imagen): void;
|
|
445
|
+
|
|
446
|
+
/** 🌆
|
|
447
|
+
* Devuelve una copia de la imagen.
|
|
448
|
+
* @returns {Q5.Image}
|
|
449
|
+
*/
|
|
450
|
+
function copiar(): Q5.Imagen;
|
|
451
|
+
|
|
452
|
+
/** 🌆
|
|
453
|
+
* Muestra una región de la imagen en otra región de la imagen.
|
|
454
|
+
* Se puede usar para crear un detalle insertado, también conocido como efecto de lupa.
|
|
455
|
+
* @param {number} sx coordenada x de la región fuente
|
|
456
|
+
* @param {number} sy coordenada y de la región fuente
|
|
457
|
+
* @param {number} sw ancho de la región fuente
|
|
458
|
+
* @param {number} sh alto de la región fuente
|
|
459
|
+
* @param {number} dx coordenada x de la región destino
|
|
460
|
+
* @param {number} dy coordenada y de la región destino
|
|
461
|
+
* @param {number} dw ancho de la región destino
|
|
462
|
+
* @param {number} dh alto de la región destino
|
|
463
|
+
* @example
|
|
464
|
+
* crearLienzo(200);
|
|
465
|
+
*
|
|
466
|
+
* let logo = cargarImagen('/q5js_logo.avif');
|
|
467
|
+
*
|
|
468
|
+
* function setup() {
|
|
469
|
+
* logo.insertado(256, 256, 512, 512, 0, 0, 256, 256);
|
|
470
|
+
* imagen(logo, 0, 0, 200, 200);
|
|
471
|
+
* }
|
|
472
|
+
*/
|
|
473
|
+
function insertado(sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void;
|
|
474
|
+
|
|
475
|
+
/** 🌆
|
|
476
|
+
* Recupera una subsección de una imagen o lienzo como una nueva Imagen Q5
|
|
477
|
+
* o el color de un píxel en la imagen o lienzo.
|
|
478
|
+
*
|
|
479
|
+
* Si solo se especifican x e y, esta función devuelve el color del píxel
|
|
480
|
+
* en la coordenada dada en formato de array `[R, G, B, A]`. Si `cargarPíxeles`
|
|
481
|
+
* nunca se ha ejecutado, es ejecutado por esta función.
|
|
482
|
+
*
|
|
483
|
+
* Si haces cambios en el lienzo o imagen, debes llamar a `cargarPíxeles`
|
|
484
|
+
* antes de usar esta función para obtener los datos de color actuales.
|
|
485
|
+
*
|
|
486
|
+
* No aplicable a lienzos WebGPU.
|
|
487
|
+
* @param {number} x
|
|
488
|
+
* @param {number} y
|
|
489
|
+
* @param {number} [w] ancho del área, por defecto es 1
|
|
490
|
+
* @param {number} [h] alto del área, por defecto es 1
|
|
491
|
+
* @returns {Q5.Image | number[]}
|
|
492
|
+
* @example
|
|
493
|
+
* function dibujar() {
|
|
494
|
+
* fondo(200);
|
|
495
|
+
* sinTrazo();
|
|
496
|
+
* círculo(100, 100, frameCount % 200);
|
|
497
|
+
*
|
|
498
|
+
* cargarPíxeles();
|
|
499
|
+
* let col = obtener(ratónX, ratónY);
|
|
500
|
+
* texto(col, ratónX, ratónY);
|
|
501
|
+
* }
|
|
502
|
+
* @example
|
|
503
|
+
* crearLienzo(200);
|
|
504
|
+
*
|
|
505
|
+
* let logo = cargarImagen('/q5js_logo.avif');
|
|
506
|
+
*
|
|
507
|
+
* function setup() {
|
|
508
|
+
* let recortada = logo.obtener(256, 256, 512, 512);
|
|
509
|
+
* imagen(recortada, 0, 0, 200, 200);
|
|
510
|
+
* }
|
|
511
|
+
*/
|
|
512
|
+
function obtener(x: number, y: number, w?: number, h?: number): Q5.Imagen | number[];
|
|
513
|
+
|
|
514
|
+
/** 🌆
|
|
515
|
+
* Establece el color de un píxel en la imagen o lienzo. El modo de color debe ser RGB.
|
|
516
|
+
*
|
|
517
|
+
* O si se proporciona un lienzo o imagen, se dibuja encima de la
|
|
518
|
+
* imagen o lienzo de destino, ignorando su configuración de tinte.
|
|
519
|
+
*
|
|
520
|
+
* Ejecuta `actualizarPíxeles` para aplicar los cambios.
|
|
521
|
+
*
|
|
522
|
+
* No aplicable a lienzos WebGPU.
|
|
523
|
+
* @param {number} x
|
|
524
|
+
* @param {number} y
|
|
525
|
+
* @param {any} val color, lienzo, o imagen
|
|
526
|
+
* @example
|
|
527
|
+
* crearLienzo(200);
|
|
528
|
+
* let c = color('lime');
|
|
529
|
+
*
|
|
530
|
+
* function dibujar() {
|
|
531
|
+
* establecer(aleatorio(200), aleatorio(200), c);
|
|
532
|
+
* actualizarPíxeles();
|
|
533
|
+
* }
|
|
534
|
+
*/
|
|
535
|
+
function establecer(x: number, y: number, val: any): void;
|
|
536
|
+
|
|
537
|
+
/** 🌆
|
|
538
|
+
* Array de datos de color de píxeles de un lienzo o imagen.
|
|
539
|
+
*
|
|
540
|
+
* Vacío por defecto, poblar ejecutando `cargarPíxeles`.
|
|
541
|
+
*
|
|
542
|
+
* Cada píxel está representado por cuatro valores consecutivos en el array,
|
|
543
|
+
* correspondientes a sus canales rojo, verde, azul y alfa.
|
|
544
|
+
*
|
|
545
|
+
* Los datos del píxel superior izquierdo están al principio del array
|
|
546
|
+
* y los datos del píxel inferior derecho están al final, yendo de
|
|
547
|
+
* izquierda a derecha y de arriba a abajo.
|
|
548
|
+
*/
|
|
549
|
+
function píxeles(): void;
|
|
550
|
+
|
|
551
|
+
/** 🌆
|
|
552
|
+
* Carga datos de píxeles en `píxeles` desde el lienzo o imagen.
|
|
553
|
+
*
|
|
554
|
+
* El ejemplo a continuación establece el canal verde de algunos píxeles
|
|
555
|
+
* a un valor aleatorio.
|
|
556
|
+
*
|
|
557
|
+
* No aplicable a lienzos WebGPU.
|
|
558
|
+
* @example
|
|
559
|
+
* frecuenciaRefresco(5);
|
|
560
|
+
* let icono = cargarImagen('/q5js_icon.png');
|
|
561
|
+
*
|
|
562
|
+
* function dibujar() {
|
|
563
|
+
* icono.cargarPíxeles();
|
|
564
|
+
* for (let i = 0; i < icono.píxeles.length; i += 16) {
|
|
565
|
+
* icono.píxeles[i + 1] = aleatorio(255);
|
|
566
|
+
* }
|
|
567
|
+
* icono.actualizarPíxeles();
|
|
568
|
+
* fondo(icono);
|
|
569
|
+
* }
|
|
570
|
+
*/
|
|
571
|
+
function cargarPíxeles(): void;
|
|
572
|
+
|
|
573
|
+
/** 🌆
|
|
574
|
+
* Aplica cambios en el array `píxeles` al lienzo o imagen.
|
|
575
|
+
*
|
|
576
|
+
* No aplicable a lienzos WebGPU.
|
|
577
|
+
* @example
|
|
578
|
+
* crearLienzo(200);
|
|
579
|
+
*
|
|
580
|
+
* for (let x = 0; x < 200; x += 5) {
|
|
581
|
+
* for (let y = 0; y < 200; y += 5) {
|
|
582
|
+
* establecer(x, y, color('pink'));
|
|
583
|
+
* }
|
|
584
|
+
* }
|
|
585
|
+
* actualizarPíxeles();
|
|
586
|
+
*/
|
|
587
|
+
function actualizarPíxeles(): void;
|
|
588
|
+
|
|
589
|
+
/** 🌆
|
|
590
|
+
* Aplica un filtro a la imagen.
|
|
591
|
+
*
|
|
592
|
+
* Mira la documentación de las constantes de filtro de q5 a continuación para más información.
|
|
593
|
+
*
|
|
594
|
+
* También se puede usar una cadena de filtro CSS.
|
|
595
|
+
* https://developer.mozilla.org/docs/Web/CSS/filter
|
|
596
|
+
*
|
|
597
|
+
* No aplicable a lienzos WebGPU.
|
|
598
|
+
* @param {string} tipo tipo de filtro o una cadena de filtro CSS
|
|
599
|
+
* @param {number} [valor] valor opcional, depende del tipo de filtro
|
|
600
|
+
* @example
|
|
601
|
+
* crearLienzo(200);
|
|
602
|
+
* let logo = cargarImagen('/q5js_logo.avif');
|
|
603
|
+
*
|
|
604
|
+
* function setup() {
|
|
605
|
+
* logo.filtro(INVERTIR);
|
|
606
|
+
* imagen(logo, 0, 0, 200, 200);
|
|
607
|
+
* }
|
|
608
|
+
*/
|
|
609
|
+
function filtro(tipo: string, valor?: number): void;
|
|
610
|
+
|
|
611
|
+
/** 🌆
|
|
612
|
+
* Convierte la imagen a píxeles blancos y negros dependiendo si están por encima o por debajo de cierto umbral.
|
|
613
|
+
*/
|
|
614
|
+
const UMBRAL: 1;
|
|
615
|
+
|
|
616
|
+
/** 🌆
|
|
617
|
+
* Convierte la imagen a escala de grises estableciendo cada píxel a su luminancia.
|
|
618
|
+
*/
|
|
619
|
+
const GRIS: 2;
|
|
620
|
+
|
|
621
|
+
/** 🌆
|
|
622
|
+
* Establece el canal alfa a totalmente opaco.
|
|
623
|
+
*/
|
|
624
|
+
const OPACO: 3;
|
|
625
|
+
|
|
626
|
+
/** 🌆
|
|
627
|
+
* Invierte el color de cada píxel.
|
|
628
|
+
*/
|
|
629
|
+
const INVERTIR: 4;
|
|
630
|
+
|
|
631
|
+
/** 🌆
|
|
632
|
+
* Limita cada canal de la imagen al número de colores especificado como argumento.
|
|
633
|
+
*/
|
|
634
|
+
const POSTERIZAR: 5;
|
|
635
|
+
|
|
636
|
+
/** 🌆
|
|
637
|
+
* Aumenta el tamaño de las áreas brillantes.
|
|
638
|
+
*/
|
|
639
|
+
const DILATAR: 6;
|
|
640
|
+
|
|
641
|
+
/** 🌆
|
|
642
|
+
* Aumenta el tamaño de las áreas oscuras.
|
|
643
|
+
*/
|
|
644
|
+
const EROSIONAR: 7;
|
|
645
|
+
|
|
646
|
+
/** 🌆
|
|
647
|
+
* Aplica un desenfoque gaussiano a la imagen.
|
|
648
|
+
*/
|
|
649
|
+
const DESENFOCAR: 8;
|
|
650
|
+
|
|
651
|
+
/** 🌆
|
|
652
|
+
* Crea una nueva imagen.
|
|
653
|
+
* @param {number} w ancho
|
|
654
|
+
* @param {number} h alto
|
|
655
|
+
* @param {any} [opt] configuraciones opcionales para la imagen
|
|
656
|
+
* @returns {Q5.Image}
|
|
657
|
+
*/
|
|
658
|
+
function crearImagen(w: number, h: number, opt?: any): Q5.Imagen;
|
|
659
|
+
|
|
660
|
+
/** 🌆
|
|
661
|
+
* Crea un búfer de gráficos.
|
|
662
|
+
*
|
|
663
|
+
* Deshabilitado por defecto en q5 WebGPU.
|
|
664
|
+
* Mira el issue [#104](https://github.com/q5js/q5.js/issues/104) para detalles.
|
|
665
|
+
* @param {number} w ancho
|
|
666
|
+
* @param {number} h alto
|
|
667
|
+
* @param {object} [opt] opciones
|
|
668
|
+
* @returns {Q5} un nuevo búfer de gráficos Q5
|
|
669
|
+
*/
|
|
670
|
+
function crearGráficos(): void;
|
|
671
|
+
|
|
672
|
+
// 📘 text
|
|
673
|
+
|
|
674
|
+
/** 📘
|
|
675
|
+
* Renderiza texto en el lienzo.
|
|
676
|
+
*
|
|
677
|
+
* El texto se puede posicionar con los parámetros x e y
|
|
678
|
+
* y opcionalmente se puede restringir.
|
|
679
|
+
* @param {string} str cadena de texto a mostrar
|
|
680
|
+
* @param {number} x coordenada-x de la posición del texto
|
|
681
|
+
* @param {number} y coordenada-y de la posición del texto
|
|
682
|
+
* @param {number} [anchoEnvoltura] ancho máximo de línea en caracteres
|
|
683
|
+
* @param {number} [limiteLineas] número máximo de líneas
|
|
684
|
+
* @example
|
|
685
|
+
* crearLienzo(200, 100);
|
|
686
|
+
* fondo('silver');
|
|
687
|
+
*
|
|
688
|
+
* tamañoTexto(32);
|
|
689
|
+
* texto('Hello, world!', 12, 60);
|
|
690
|
+
* @example
|
|
691
|
+
* crearLienzo(200);
|
|
692
|
+
* fondo(200);
|
|
693
|
+
* tamañoTexto(20);
|
|
694
|
+
*
|
|
695
|
+
* let info =
|
|
696
|
+
* 'q5.js was designed to make creative coding fun and accessible for a new generation of artists, designers, educators, and beginners.';
|
|
697
|
+
*
|
|
698
|
+
* texto(info, 12, 30, 20, 6);
|
|
699
|
+
* //
|
|
700
|
+
* //
|
|
701
|
+
*/
|
|
702
|
+
function texto(str: string, x: number, y: number, anchoEnvoltura?: number, limiteLineas?: number): void;
|
|
703
|
+
|
|
704
|
+
/** 📘
|
|
705
|
+
* Carga una fuente desde una URL.
|
|
706
|
+
*
|
|
707
|
+
* El archivo de fuente puede estar en cualquier formato aceptado en CSS, como
|
|
708
|
+
* archivos .ttf y .otf. El primer ejemplo a continuación carga
|
|
709
|
+
* [Robotica](https://www.dafont.com/robotica-courtney.font).
|
|
710
|
+
*
|
|
711
|
+
* También soporta cargar [fuentes de Google](https://fonts.google.com/).
|
|
712
|
+
* El segundo ejemplo carga
|
|
713
|
+
* [Pacifico](https://fonts.google.com/specimen/Pacifico).
|
|
714
|
+
*
|
|
715
|
+
* Si no se cargan fuentes, se usa la fuente sans-serif por defecto.
|
|
716
|
+
*
|
|
717
|
+
* Por defecto, los recursos se cargan en paralelo antes de que q5 ejecute `dibujar`. Usa `await` para esperar a que una fuente se cargue.
|
|
718
|
+
* @param {string} url URL de la fuente a cargar
|
|
719
|
+
* @returns {FontFace & PromiseLike<FontFace>} fuente
|
|
720
|
+
* @example
|
|
721
|
+
* crearLienzo(200, 56);
|
|
722
|
+
*
|
|
723
|
+
* cargarFuente('/assets/Robotica.ttf');
|
|
724
|
+
*
|
|
725
|
+
* function setup() {
|
|
726
|
+
* relleno('skyblue');
|
|
727
|
+
* tamañoTexto(64);
|
|
728
|
+
* texto('Hello!', 2, 54);
|
|
729
|
+
* }
|
|
730
|
+
* @example
|
|
731
|
+
* crearLienzo(200, 74);
|
|
732
|
+
*
|
|
733
|
+
* cargarFuente('fonts.googleapis.com/css2?family=Pacifico');
|
|
734
|
+
*
|
|
735
|
+
* function setup() {
|
|
736
|
+
* relleno('hotpink');
|
|
737
|
+
* tamañoTexto(68);
|
|
738
|
+
* texto('Hello!', 2, 68);
|
|
739
|
+
* }
|
|
740
|
+
*/
|
|
741
|
+
function cargarFuente(url: string): FontFace & PromiseLike<FontFace>;
|
|
742
|
+
|
|
743
|
+
/** 📘
|
|
744
|
+
* Establece la fuente actual a usar para renderizar texto.
|
|
745
|
+
*
|
|
746
|
+
* Por defecto, la fuente se establece a la [familia de fuentes CSS](https://developer.mozilla.org/docs/Web/CSS/font-family)
|
|
747
|
+
* "sans-serif" o la última fuente cargada.
|
|
748
|
+
* @param {string} nombreFuente nombre de la familia de fuentes o un objeto FontFace
|
|
749
|
+
* @example
|
|
750
|
+
* crearLienzo(200, 160);
|
|
751
|
+
* fondo(200);
|
|
752
|
+
*
|
|
753
|
+
* fuenteTexto('serif');
|
|
754
|
+
*
|
|
755
|
+
* tamañoTexto(32);
|
|
756
|
+
* texto('Hello, world!', 15, 90);
|
|
757
|
+
* @example
|
|
758
|
+
* crearLienzo(200);
|
|
759
|
+
* fondo(200);
|
|
760
|
+
*
|
|
761
|
+
* fuenteTexto('monospace');
|
|
762
|
+
*
|
|
763
|
+
* tamañoTexto(24);
|
|
764
|
+
* texto('Hello, world!', 15, 90);
|
|
765
|
+
*/
|
|
766
|
+
function fuenteTexto(nombreFuente: string): void;
|
|
767
|
+
|
|
768
|
+
/** 📘
|
|
769
|
+
* Establece u obtiene el tamaño de fuente actual. Si no se proporciona argumento, devuelve el tamaño de fuente actual.
|
|
770
|
+
* @param {number} [tamaño] tamaño de la fuente en píxeles
|
|
771
|
+
* @returns {number | void} tamaño de fuente actual cuando no se proporciona argumento
|
|
772
|
+
* @example
|
|
773
|
+
* function dibujar() {
|
|
774
|
+
* fondo(200);
|
|
775
|
+
*
|
|
776
|
+
* tamañoTexto(abs(ratónX));
|
|
777
|
+
* texto('A', 10, 190);
|
|
778
|
+
* }
|
|
779
|
+
*/
|
|
780
|
+
function tamañoTexto(): void;
|
|
781
|
+
|
|
782
|
+
/** 📘
|
|
783
|
+
* Establece u obtiene la altura de línea actual. Si no se proporciona argumento, devuelve la altura de línea actual.
|
|
784
|
+
* @param {number} [interlineado] altura de línea en píxeles
|
|
785
|
+
* @returns {number | void} altura de línea actual cuando no se proporciona argumento
|
|
786
|
+
* @example
|
|
787
|
+
* function dibujar() {
|
|
788
|
+
* fondo(200);
|
|
789
|
+
*
|
|
790
|
+
* tamañoTexto(abs(ratónX));
|
|
791
|
+
* texto('A', 10, 190);
|
|
792
|
+
* rect(10, 190, 5, -interlineado());
|
|
793
|
+
* }
|
|
794
|
+
*/
|
|
795
|
+
function interlineado(interlineado?: number): number | void;
|
|
796
|
+
|
|
797
|
+
/** 📘
|
|
798
|
+
* Establece el estilo de texto actual.
|
|
799
|
+
*
|
|
800
|
+
* No aplicable a WebGPU cuando se usan fuentes MSDF.
|
|
801
|
+
* @param {'normal' | 'italic' | 'bold' | 'bolditalic'} estilo estilo de fuente
|
|
802
|
+
* @example
|
|
803
|
+
* crearLienzo(200);
|
|
804
|
+
* fondo(200);
|
|
805
|
+
*
|
|
806
|
+
* estiloTexto(CURSIVA);
|
|
807
|
+
*
|
|
808
|
+
* tamañoTexto(32);
|
|
809
|
+
* texto('Hello, world!', 12, 106);
|
|
810
|
+
*/
|
|
811
|
+
function estiloTexto(estilo: 'normal' | 'italic' | 'bold' | 'bolditalic'): void;
|
|
812
|
+
|
|
813
|
+
/** 📘
|
|
814
|
+
* Establece la alineación horizontal y vertical del texto.
|
|
815
|
+
* @param {'left' | 'center' | 'right'} horiz alineación horizontal
|
|
816
|
+
* @param {'top' | 'middle' | 'bottom' | 'alphabetic'} [vert] alineación vertical
|
|
817
|
+
* @example
|
|
818
|
+
* crearLienzo(200);
|
|
819
|
+
* fondo(200);
|
|
820
|
+
* tamañoTexto(32);
|
|
821
|
+
*
|
|
822
|
+
* alineaciónTexto(CENTRO, MEDIO);
|
|
823
|
+
* texto('Hello, world!', 100, 100);
|
|
824
|
+
*/
|
|
825
|
+
function alineaciónTexto(): void;
|
|
826
|
+
|
|
827
|
+
/** 📘
|
|
828
|
+
* Establece el peso del texto.
|
|
829
|
+
*
|
|
830
|
+
* - 100: delgado
|
|
831
|
+
* - 200: extra-ligero
|
|
832
|
+
* - 300: ligero
|
|
833
|
+
* - 400: normal/regular
|
|
834
|
+
* - 500: medio
|
|
835
|
+
* - 600: semi-negrita
|
|
836
|
+
* - 700: negrita
|
|
837
|
+
* - 800: más negrita/extra-negrita
|
|
838
|
+
* - 900: negro/pesado
|
|
839
|
+
* @param {number | string} peso peso de la fuente
|
|
840
|
+
* @example
|
|
841
|
+
* crearLienzo(200);
|
|
842
|
+
* fondo(200);
|
|
843
|
+
* tamañoTexto(32);
|
|
844
|
+
* alineaciónTexto(CENTRO, MEDIO);
|
|
845
|
+
*
|
|
846
|
+
* pesoTexto(100);
|
|
847
|
+
* texto('Hello, world!', 100, 100);
|
|
848
|
+
*/
|
|
849
|
+
function pesoTexto(peso: number | string): void;
|
|
850
|
+
|
|
851
|
+
/** 📘
|
|
852
|
+
* Calcula y devuelve el ancho de una cadena de texto dada.
|
|
853
|
+
* @param {string} str cadena a medir
|
|
854
|
+
* @returns {number} ancho del texto en píxeles
|
|
855
|
+
* @example
|
|
856
|
+
* function dibujar() {
|
|
857
|
+
* fondo(200);
|
|
858
|
+
*
|
|
859
|
+
* tamañoTexto(abs(ratónX));
|
|
860
|
+
* rect(10, 190, anchoTexto('A'), -interlineado());
|
|
861
|
+
* texto('A', 10, 190);
|
|
862
|
+
* }
|
|
863
|
+
*/
|
|
864
|
+
function anchoTexto(str: string): number;
|
|
865
|
+
|
|
866
|
+
/** 📘
|
|
867
|
+
* Calcula y devuelve el ascenso (la distancia desde la línea base hasta la parte superior del carácter más alto) de la fuente actual.
|
|
868
|
+
* @param {string} str cadena a medir
|
|
869
|
+
* @returns {number} ascenso del texto en píxeles
|
|
870
|
+
* @example
|
|
871
|
+
* function dibujar() {
|
|
872
|
+
* fondo(200);
|
|
873
|
+
*
|
|
874
|
+
* tamañoTexto(abs(ratónX));
|
|
875
|
+
* rect(10, 190, anchoTexto('A'), -ascensoTexto());
|
|
876
|
+
* texto('A', 10, 190);
|
|
877
|
+
* }
|
|
878
|
+
*/
|
|
879
|
+
function ascensoTexto(str: string): number;
|
|
880
|
+
|
|
881
|
+
/** 📘
|
|
882
|
+
* Calcula y devuelve el descenso (la distancia desde la línea base hasta la parte inferior del carácter más bajo) de la fuente actual.
|
|
883
|
+
* @param {string} str cadena a medir
|
|
884
|
+
* @returns {number} descenso del texto en píxeles
|
|
885
|
+
* @example
|
|
886
|
+
* crearLienzo(200);
|
|
887
|
+
* fondo(200);
|
|
888
|
+
* tamañoTexto(64);
|
|
889
|
+
*
|
|
890
|
+
* rect(0, 100, 200, descensoTexto('q5'));
|
|
891
|
+
* texto('q5', 10, 100);
|
|
892
|
+
*/
|
|
893
|
+
function descensoTexto(str: string): number;
|
|
894
|
+
|
|
895
|
+
/** 📘
|
|
896
|
+
* Crea una imagen a partir de una cadena de texto.
|
|
897
|
+
* @param {string} str cadena de texto
|
|
898
|
+
* @param {number} [anchoEnvoltura] ancho máximo de línea en caracteres
|
|
899
|
+
* @param {number} [limiteLineas] número máximo de líneas
|
|
900
|
+
* @returns {Q5.Image} un objeto de imagen representando el texto renderizado
|
|
901
|
+
* @example
|
|
902
|
+
* crearLienzo(200);
|
|
903
|
+
* tamañoTexto(96);
|
|
904
|
+
*
|
|
905
|
+
* let img = crearImagenTexto('🐶');
|
|
906
|
+
* img.filtro(INVERTIR);
|
|
907
|
+
*
|
|
908
|
+
* function dibujar() {
|
|
909
|
+
* imagen(img, 55, 10);
|
|
910
|
+
* }
|
|
911
|
+
*/
|
|
912
|
+
function crearImagenTexto(str: string, anchoEnvoltura: number, limiteLineas: number): Q5.Imagen;
|
|
913
|
+
|
|
914
|
+
/** 📘
|
|
915
|
+
* Renderiza una imagen generada a partir de texto en el lienzo.
|
|
916
|
+
*
|
|
917
|
+
* Si el primer parámetro es una cadena, se creará y almacenará en caché automáticamente
|
|
918
|
+
* una imagen del texto.
|
|
919
|
+
*
|
|
920
|
+
* El posicionamiento de la imagen se ve afectado por la configuración actual de
|
|
921
|
+
* alineación de texto y línea base.
|
|
922
|
+
*
|
|
923
|
+
* En q5 WebGPU, esta función es la única forma de dibujar texto multicolor,
|
|
924
|
+
* como emojis, y de usar fuentes que no están en formato MSDF.
|
|
925
|
+
* Usar esta función para dibujar texto que cambia cada fotograma tiene
|
|
926
|
+
* un costo de rendimiento muy alto.
|
|
927
|
+
* @param {Q5.Image | string} img imagen o texto
|
|
928
|
+
* @param {number} x coordenada-x donde se debe colocar la imagen
|
|
929
|
+
* @param {number} y coordenada-y donde se debe colocar la imagen
|
|
930
|
+
* @example
|
|
931
|
+
* crearLienzo(200);
|
|
932
|
+
* fondo(200);
|
|
933
|
+
* tamañoTexto(96);
|
|
934
|
+
* alineaciónTexto(CENTRO, CENTRO);
|
|
935
|
+
*
|
|
936
|
+
* imagenTexto('🐶', 100, 100);
|
|
937
|
+
* @example
|
|
938
|
+
* crearLienzo(200);
|
|
939
|
+
*
|
|
940
|
+
* cargarFuente('/assets/Robotica.ttf');
|
|
941
|
+
*
|
|
942
|
+
* function setup() {
|
|
943
|
+
* fondo(200);
|
|
944
|
+
* tamañoTexto(66);
|
|
945
|
+
* imagenTexto('Hello!', 0, 0);
|
|
946
|
+
* }
|
|
947
|
+
*/
|
|
948
|
+
function imagenTexto(img: Q5.Imagen | String, x: number, y: number): void;
|
|
949
|
+
|
|
950
|
+
/** 📘
|
|
951
|
+
* Formateador de números, se puede usar para mostrar un número como una cadena con
|
|
952
|
+
* un número especificado de dígitos antes y después del punto decimal,
|
|
953
|
+
* opcionalmente añadiendo relleno con ceros.
|
|
954
|
+
* @param {number} n número a formatear
|
|
955
|
+
* @param {number} l número mínimo de dígitos que aparecen antes del punto decimal; el número se rellena con ceros si es necesario
|
|
956
|
+
* @param {number} r número de dígitos que aparecen después del punto decimal
|
|
957
|
+
* @returns {string} una representación de cadena del número, formateada en consecuencia
|
|
958
|
+
* @example
|
|
959
|
+
* crearLienzo(200, 100);
|
|
960
|
+
* fondo(200);
|
|
961
|
+
*
|
|
962
|
+
* tamañoTexto(32);
|
|
963
|
+
* texto(nf(PI, 4, 5), 10, 60);
|
|
964
|
+
*/
|
|
965
|
+
function nf(num: number, digitos: number): string;
|
|
966
|
+
|
|
967
|
+
/** 📘
|
|
968
|
+
* Estilo de fuente normal.
|
|
969
|
+
*/
|
|
970
|
+
const NORMAL: 'normal';
|
|
971
|
+
|
|
972
|
+
/** 📘
|
|
973
|
+
* Estilo de fuente cursiva.
|
|
974
|
+
*/
|
|
975
|
+
const CURSIVA: 'italic';
|
|
976
|
+
|
|
977
|
+
/** 📘
|
|
978
|
+
* Peso de fuente negrita.
|
|
979
|
+
*/
|
|
980
|
+
const NEGRILLA: 'bold';
|
|
981
|
+
|
|
982
|
+
/** 📘
|
|
983
|
+
* Estilo de fuente negrita y cursiva.
|
|
984
|
+
*/
|
|
985
|
+
const NEGRILLA_CURSIVA: 'italic bold';
|
|
986
|
+
|
|
987
|
+
/** 📘
|
|
988
|
+
* Alinear texto a la izquierda.
|
|
989
|
+
*/
|
|
990
|
+
const IZQUIERDA: 'left';
|
|
991
|
+
|
|
992
|
+
/** 📘
|
|
993
|
+
* Alinear texto al centro.
|
|
994
|
+
*/
|
|
995
|
+
const CENTRO: 'center';
|
|
996
|
+
|
|
997
|
+
/** 📘
|
|
998
|
+
* Alinear texto a la derecha.
|
|
999
|
+
*/
|
|
1000
|
+
const DERECHA: 'right';
|
|
1001
|
+
|
|
1002
|
+
/** 📘
|
|
1003
|
+
* Alinear texto arriba.
|
|
1004
|
+
*/
|
|
1005
|
+
const ARRIBA: 'top';
|
|
1006
|
+
|
|
1007
|
+
/** 📘
|
|
1008
|
+
* Alinear texto abajo.
|
|
1009
|
+
*/
|
|
1010
|
+
const ABAJO: 'bottom';
|
|
1011
|
+
|
|
1012
|
+
/** 📘
|
|
1013
|
+
* Alinear texto a la línea base (alfabética).
|
|
1014
|
+
*/
|
|
1015
|
+
const LINEA_BASE: 'alphabetic';
|
|
1016
|
+
|
|
1017
|
+
// 🖲 input
|
|
1018
|
+
|
|
1019
|
+
/**
|
|
1020
|
+
* El manejo de entrada de q5 es muy básico.
|
|
1021
|
+
*
|
|
1022
|
+
* Para un mejor manejo de entrada, incluyendo soporte para controladores de juegos, considera usar el addon [p5play](https://p5play.org/) con q5.
|
|
1023
|
+
*
|
|
1024
|
+
* Ten en cuenta que las respuestas de entrada dentro de `dibujar` pueden retrasarse
|
|
1025
|
+
* hasta un ciclo de fotograma: desde el momento exacto en que ocurre un evento de entrada
|
|
1026
|
+
* hasta la próxima vez que se dibuja un fotograma.
|
|
1027
|
+
*
|
|
1028
|
+
* Reproduce sonidos o activa otra retroalimentación no visual inmediatamente
|
|
1029
|
+
* respondiendo a eventos de entrada dentro de funciones como
|
|
1030
|
+
* `alPresionarRatón` y `alPresionarTecla`.
|
|
1031
|
+
*/
|
|
1032
|
+
|
|
1033
|
+
/** 🖲
|
|
1034
|
+
* Posición X actual del ratón.
|
|
1035
|
+
* @example
|
|
1036
|
+
* function dibujar() {
|
|
1037
|
+
* fondo(200);
|
|
1038
|
+
* tamañoTexto(64);
|
|
1039
|
+
* texto(redondear(ratónX), 50, 120);
|
|
1040
|
+
* }
|
|
1041
|
+
*/
|
|
1042
|
+
function ratónX(): void;
|
|
1043
|
+
|
|
1044
|
+
/** 🖲
|
|
1045
|
+
* Posición Y actual del ratón.
|
|
1046
|
+
* @example
|
|
1047
|
+
* function dibujar() {
|
|
1048
|
+
* fondo(200);
|
|
1049
|
+
* círculo(100, ratónY, 100);
|
|
1050
|
+
* }
|
|
1051
|
+
*/
|
|
1052
|
+
function ratónY(): void;
|
|
1053
|
+
|
|
1054
|
+
/** 🖲
|
|
1055
|
+
* Posición X previa del ratón.
|
|
1056
|
+
*/
|
|
1057
|
+
function pRatónX(): void;
|
|
1058
|
+
|
|
1059
|
+
/** 🖲
|
|
1060
|
+
* Posición Y previa del ratón.
|
|
1061
|
+
*/
|
|
1062
|
+
function pRatónY(): void;
|
|
1063
|
+
|
|
1064
|
+
/** 🖲
|
|
1065
|
+
* El botón actual siendo presionado: 'left', 'right', 'center').
|
|
1066
|
+
*
|
|
1067
|
+
* El valor por defecto es una cadena vacía.
|
|
1068
|
+
* @example
|
|
1069
|
+
* function dibujar() {
|
|
1070
|
+
* fondo(200);
|
|
1071
|
+
* tamañoTexto(64);
|
|
1072
|
+
* texto(botónRatón, 20, 120);
|
|
1073
|
+
* }
|
|
1074
|
+
*/
|
|
1075
|
+
function botónRatón(): void;
|
|
1076
|
+
|
|
1077
|
+
/** 🖲
|
|
1078
|
+
* Verdadero si el ratón está actualmente presionado, falso de lo contrario.
|
|
1079
|
+
* @example
|
|
1080
|
+
* function dibujar() {
|
|
1081
|
+
* if (ratónPresionado) fondo(100);
|
|
1082
|
+
* else fondo(200);
|
|
1083
|
+
* }
|
|
1084
|
+
*/
|
|
1085
|
+
function ratónPresionado(): void;
|
|
1086
|
+
|
|
1087
|
+
/** 🖲
|
|
1088
|
+
* Define esta función para responder a eventos de presionar el ratón.
|
|
1089
|
+
* @example
|
|
1090
|
+
* crearLienzo(200);
|
|
1091
|
+
* let gris = 95;
|
|
1092
|
+
*
|
|
1093
|
+
* function alPresionarRatón() {
|
|
1094
|
+
* fondo(gris % 256);
|
|
1095
|
+
* gris += 40;
|
|
1096
|
+
* }
|
|
1097
|
+
*/
|
|
1098
|
+
function alPresionarRatón(): void;
|
|
1099
|
+
|
|
1100
|
+
/** 🖲
|
|
1101
|
+
* Define esta función para responder a eventos de soltar el ratón.
|
|
1102
|
+
* @example
|
|
1103
|
+
* crearLienzo(200);
|
|
1104
|
+
* let gris = 95;
|
|
1105
|
+
*
|
|
1106
|
+
* function alSoltarRatón() {
|
|
1107
|
+
* fondo(gris % 256);
|
|
1108
|
+
* gris += 40;
|
|
1109
|
+
* }
|
|
1110
|
+
*/
|
|
1111
|
+
function alSoltarRatón(): void;
|
|
1112
|
+
|
|
1113
|
+
/** 🖲
|
|
1114
|
+
* Define esta función para responder a eventos de mover el ratón.
|
|
1115
|
+
*
|
|
1116
|
+
* En dispositivos con pantalla táctil esta función no se llama
|
|
1117
|
+
* cuando el usuario arrastra su dedo en la pantalla.
|
|
1118
|
+
* @example
|
|
1119
|
+
* crearLienzo(200);
|
|
1120
|
+
* let gris = 95;
|
|
1121
|
+
*
|
|
1122
|
+
* function alMoverRatón() {
|
|
1123
|
+
* fondo(gris % 256);
|
|
1124
|
+
* gris++;
|
|
1125
|
+
* }
|
|
1126
|
+
*/
|
|
1127
|
+
function alMoverRatón(): void;
|
|
1128
|
+
|
|
1129
|
+
/** 🖲
|
|
1130
|
+
* Define esta función para responder a eventos de arrastrar el ratón.
|
|
1131
|
+
*
|
|
1132
|
+
* Arrastrar el ratón se define como mover el ratón
|
|
1133
|
+
* mientras un botón del ratón está presionado.
|
|
1134
|
+
* @example
|
|
1135
|
+
* crearLienzo(200);
|
|
1136
|
+
* let gris = 95;
|
|
1137
|
+
*
|
|
1138
|
+
* function alArrastrarRatón() {
|
|
1139
|
+
* fondo(gris % 256);
|
|
1140
|
+
* gris++;
|
|
1141
|
+
* }
|
|
1142
|
+
*/
|
|
1143
|
+
function alArrastrarRatón(): void;
|
|
1144
|
+
|
|
1145
|
+
/** 🖲
|
|
1146
|
+
* Define esta función para responder a eventos de doble clic del ratón.
|
|
1147
|
+
* @example
|
|
1148
|
+
* crearLienzo(200);
|
|
1149
|
+
* let gris = 95;
|
|
1150
|
+
*
|
|
1151
|
+
* function dobleClic() {
|
|
1152
|
+
* fondo(gris % 256);
|
|
1153
|
+
* gris += 40;
|
|
1154
|
+
* }
|
|
1155
|
+
*/
|
|
1156
|
+
function dobleClic(): void;
|
|
1157
|
+
|
|
1158
|
+
/** 🖲
|
|
1159
|
+
* El nombre de la última tecla presionada.
|
|
1160
|
+
* @example
|
|
1161
|
+
* function dibujar() {
|
|
1162
|
+
* fondo(200);
|
|
1163
|
+
* tamañoTexto(64);
|
|
1164
|
+
* texto(tecla, 20, 120);
|
|
1165
|
+
* }
|
|
1166
|
+
*/
|
|
1167
|
+
let tecla: string;
|
|
1168
|
+
|
|
1169
|
+
/** 🖲
|
|
1170
|
+
* Verdadero si una tecla está actualmente presionada, falso de lo contrario.
|
|
1171
|
+
* @example
|
|
1172
|
+
* function dibujar() {
|
|
1173
|
+
* if (teclaPresionada) fondo(100);
|
|
1174
|
+
* else fondo(200);
|
|
1175
|
+
* }
|
|
1176
|
+
*/
|
|
1177
|
+
let teclaPresionada: boolean;
|
|
1178
|
+
|
|
1179
|
+
/** 🖲
|
|
1180
|
+
* Devuelve verdadero si el usuario está presionando la tecla especificada, falso
|
|
1181
|
+
* de lo contrario. Acepta nombres de teclas insensibles a mayúsculas.
|
|
1182
|
+
* @param {string} tecla tecla a comprobar
|
|
1183
|
+
* @returns {boolean} verdadero si la tecla está presionada, falso de lo contrario
|
|
1184
|
+
* @example
|
|
1185
|
+
* function dibujar() {
|
|
1186
|
+
* fondo(200);
|
|
1187
|
+
*
|
|
1188
|
+
* if (teclaEstaPresionada('f') && teclaEstaPresionada('j')) {
|
|
1189
|
+
* rect(50, 50, 100, 100);
|
|
1190
|
+
* }
|
|
1191
|
+
* }
|
|
1192
|
+
*/
|
|
1193
|
+
function teclaEstaPresionada(tecla: string): boolean;
|
|
1194
|
+
|
|
1195
|
+
/** 🖲
|
|
1196
|
+
* Define esta función para responder a eventos de presionar tecla.
|
|
1197
|
+
* @example
|
|
1198
|
+
* crearLienzo(200);
|
|
1199
|
+
*
|
|
1200
|
+
* let gris = 95;
|
|
1201
|
+
* function alPresionarTecla() {
|
|
1202
|
+
* fondo(gris % 256);
|
|
1203
|
+
* gris += 40;
|
|
1204
|
+
* }
|
|
1205
|
+
*/
|
|
1206
|
+
function alPresionarTecla(): void;
|
|
1207
|
+
|
|
1208
|
+
/** 🖲
|
|
1209
|
+
* Define esta función para responder a eventos de soltar tecla.
|
|
1210
|
+
* @example
|
|
1211
|
+
* crearLienzo(200);
|
|
1212
|
+
*
|
|
1213
|
+
* let gris = 95;
|
|
1214
|
+
* function alSoltarTecla() {
|
|
1215
|
+
* fondo(gris % 256);
|
|
1216
|
+
* gris += 40;
|
|
1217
|
+
* }
|
|
1218
|
+
*/
|
|
1219
|
+
function alSoltarTecla(): void;
|
|
1220
|
+
|
|
1221
|
+
/** 🖲
|
|
1222
|
+
* Array que contiene todos los puntos de toque actuales dentro de la
|
|
1223
|
+
* ventana del navegador. Cada toque es un objeto con
|
|
1224
|
+
* propiedades `id`, `x`, e `y`.
|
|
1225
|
+
* @example
|
|
1226
|
+
* function dibujar() {
|
|
1227
|
+
* fondo(200);
|
|
1228
|
+
* for (let toque of toques) {
|
|
1229
|
+
* círculo(toque.x, toque.y, 100);
|
|
1230
|
+
* }
|
|
1231
|
+
* }
|
|
1232
|
+
*/
|
|
1233
|
+
let toques: any[];
|
|
1234
|
+
|
|
1235
|
+
/** 🖲
|
|
1236
|
+
* Define esta función para responder a eventos de inicio de toque
|
|
1237
|
+
* en el lienzo.
|
|
1238
|
+
*
|
|
1239
|
+
* Devuelve true para habilitar gestos táctiles como pellizcar para hacer zoom
|
|
1240
|
+
* y desplazarse, que q5 deshabilita en el lienzo por defecto.
|
|
1241
|
+
* @example
|
|
1242
|
+
* crearLienzo(200);
|
|
1243
|
+
*
|
|
1244
|
+
* let gris = 95;
|
|
1245
|
+
* function alEmpezarToque() {
|
|
1246
|
+
* fondo(gris % 256);
|
|
1247
|
+
* gris += 40;
|
|
1248
|
+
* }
|
|
1249
|
+
*/
|
|
1250
|
+
function alEmpezarToque(): void;
|
|
1251
|
+
|
|
1252
|
+
/** 🖲
|
|
1253
|
+
* Define esta función para responder a eventos de fin de toque
|
|
1254
|
+
* en el lienzo.
|
|
1255
|
+
*
|
|
1256
|
+
* Devuelve true para habilitar gestos táctiles como pellizcar para hacer zoom
|
|
1257
|
+
* y desplazarse, que q5 deshabilita en el lienzo por defecto.
|
|
1258
|
+
* @example
|
|
1259
|
+
* crearLienzo(200);
|
|
1260
|
+
*
|
|
1261
|
+
* let gris = 95;
|
|
1262
|
+
* function alTerminarToque() {
|
|
1263
|
+
* fondo(gris % 256);
|
|
1264
|
+
* gris += 40;
|
|
1265
|
+
* }
|
|
1266
|
+
*/
|
|
1267
|
+
function alTerminarToque(): void;
|
|
1268
|
+
|
|
1269
|
+
/** 🖲
|
|
1270
|
+
* Define esta función para responder a eventos de movimiento de toque
|
|
1271
|
+
* en el lienzo.
|
|
1272
|
+
*
|
|
1273
|
+
* Devuelve true para habilitar gestos táctiles como pellizcar para hacer zoom
|
|
1274
|
+
* y desplazarse, que q5 deshabilita en el lienzo por defecto.
|
|
1275
|
+
* @example
|
|
1276
|
+
* crearLienzo(200);
|
|
1277
|
+
* let gris = 95;
|
|
1278
|
+
*
|
|
1279
|
+
* function alMoverToque() {
|
|
1280
|
+
* fondo(gris % 256);
|
|
1281
|
+
* gris++;
|
|
1282
|
+
* }
|
|
1283
|
+
*/
|
|
1284
|
+
function alMoverToque(): void;
|
|
1285
|
+
|
|
1286
|
+
/** 🖲
|
|
1287
|
+
* Objeto que contiene todos los punteros actuales dentro de la
|
|
1288
|
+
* ventana del navegador.
|
|
1289
|
+
*
|
|
1290
|
+
* Esto incluye ratón, toque y punteros de lápiz.
|
|
1291
|
+
*
|
|
1292
|
+
* Cada puntero es un objeto con
|
|
1293
|
+
* propiedades `event`, `x`, e `y`.
|
|
1294
|
+
* La propiedad `event` contiene el
|
|
1295
|
+
* [PointerEvent](https://developer.mozilla.org/docs/Web/API/PointerEvent) original.
|
|
1296
|
+
* @example
|
|
1297
|
+
* function dibujar() {
|
|
1298
|
+
* fondo(200);
|
|
1299
|
+
* for (let punteroID in punteros) {
|
|
1300
|
+
* let puntero = punteros[punteroID];
|
|
1301
|
+
* círculo(puntero.x, puntero.y, 100);
|
|
1302
|
+
* }
|
|
1303
|
+
* }
|
|
1304
|
+
*/
|
|
1305
|
+
let punteros: {};
|
|
1306
|
+
|
|
1307
|
+
/** 🖲
|
|
1308
|
+
* Establece el cursor a un [tipo de cursor CSS](https://developer.mozilla.org/docs/Web/CSS/cursor) o imagen.
|
|
1309
|
+
* Si se proporciona una imagen, las coordenadas x e y opcionales pueden
|
|
1310
|
+
* especificar el punto activo del cursor.
|
|
1311
|
+
* @param {string} nombre nombre del cursor o la url a una imagen
|
|
1312
|
+
* @param {number} [x] coordenada x del punto del cursor
|
|
1313
|
+
* @param {number} [y] coordenada y del punto del cursor
|
|
1314
|
+
* @example
|
|
1315
|
+
* crearLienzo(200, 100);
|
|
1316
|
+
* cursor('pointer');
|
|
1317
|
+
*/
|
|
1318
|
+
function cursor(nombre: string, x?: number, y?: number): void;
|
|
1319
|
+
|
|
1320
|
+
/** 🖲
|
|
1321
|
+
* Oculta el cursor dentro de los límites del lienzo.
|
|
1322
|
+
* @example
|
|
1323
|
+
* crearLienzo(200, 100);
|
|
1324
|
+
* sinCursor();
|
|
1325
|
+
*/
|
|
1326
|
+
function sinCursor(): void;
|
|
1327
|
+
|
|
1328
|
+
/** 🖲
|
|
1329
|
+
* Define esta función para responder a eventos de la rueda del ratón.
|
|
1330
|
+
*
|
|
1331
|
+
* `event.deltaX` y `event.deltaY` son las cantidades de desplazamiento horizontal y vertical,
|
|
1332
|
+
* respectivamente.
|
|
1333
|
+
*
|
|
1334
|
+
* Devuelve true para permitir el comportamiento por defecto de desplazar la página.
|
|
1335
|
+
* @example
|
|
1336
|
+
* let x = (y = 100);
|
|
1337
|
+
* function dibujar() {
|
|
1338
|
+
* círculo(x, y, 10);
|
|
1339
|
+
* }
|
|
1340
|
+
* function ruedaRatón(e) {
|
|
1341
|
+
* x += e.deltaX;
|
|
1342
|
+
* y += e.deltaY;
|
|
1343
|
+
* return false;
|
|
1344
|
+
* }
|
|
1345
|
+
*/
|
|
1346
|
+
function ruedaRatón(): void;
|
|
1347
|
+
|
|
1348
|
+
/** 🖲
|
|
1349
|
+
* Solicita que el puntero se bloquee al cuerpo del documento, ocultando
|
|
1350
|
+
* el cursor y permitiendo un movimiento ilimitado.
|
|
1351
|
+
*
|
|
1352
|
+
* Los sistemas operativos habilitan la aceleración del ratón por defecto, lo cual es útil cuando a veces quieres un movimiento lento y preciso (piensa en cómo usarías un paquete de gráficos), pero también quieres moverte grandes distancias con un movimiento de ratón más rápido (piensa en desplazarte y seleccionar varios archivos). Para algunos juegos, sin embargo, se prefieren los datos de entrada de ratón sin procesar para controlar la rotación de la cámara — donde el mismo movimiento de distancia, rápido o lento, resulta en la misma rotación.
|
|
1353
|
+
*
|
|
1354
|
+
* Para salir del modo de bloqueo de puntero, llama a `document.exitPointerLock()`.
|
|
1355
|
+
* @param {boolean} movimientoNoAjustado establecer a true para deshabilitar la aceleración del ratón a nivel de SO y acceder a la entrada de ratón sin procesar
|
|
1356
|
+
* @example
|
|
1357
|
+
* function dibujar() {
|
|
1358
|
+
* círculo(ratónX / 10 + 100, ratónY / 10 + 100, 10);
|
|
1359
|
+
* }
|
|
1360
|
+
*
|
|
1361
|
+
* function dobleClic() {
|
|
1362
|
+
* if (!document.pointerLockElement) {
|
|
1363
|
+
* bloqueoPuntero();
|
|
1364
|
+
* } else {
|
|
1365
|
+
* document.exitPointerLock();
|
|
1366
|
+
* }
|
|
1367
|
+
* }
|
|
1368
|
+
*/
|
|
1369
|
+
function bloqueoPuntero(movimientoNoAjustado: boolean): void;
|
|
1370
|
+
|
|
50
1371
|
// 🎨 color
|
|
51
1372
|
|
|
52
|
-
/** 🎨
|
|
53
|
-
* Dibuja sobre todo el lienzo con un color o una imagen.
|
|
1373
|
+
/** 🎨
|
|
1374
|
+
* Dibuja sobre todo el lienzo con un color o una imagen.
|
|
1375
|
+
*
|
|
1376
|
+
* Al igual que la función [`color`](https://q5js.org/learn/#color),
|
|
1377
|
+
* esta función puede aceptar colores en una amplia gama de formatos:
|
|
1378
|
+
* cadena de color CSS, valor de escala de grises y valores de componentes de color.
|
|
1379
|
+
* @param {Color | Q5.Image} relleno un color o una imagen para dibujar
|
|
1380
|
+
*/
|
|
1381
|
+
function fondo(relleno: Color | Q5.Imagen): void;
|
|
1382
|
+
|
|
1383
|
+
function color(c0: string | number | Color | number[], c1?: number, c2?: number, c3?: number): Color;
|
|
1384
|
+
|
|
1385
|
+
function modoColor(modo: 'rgb' | 'oklch', formato: 1 | 255, gama: 'srgb' | 'display-p3'): void;
|
|
1386
|
+
|
|
1387
|
+
const RGB: 'rgb';
|
|
1388
|
+
|
|
1389
|
+
const OKLCH: 'oklch';
|
|
1390
|
+
|
|
1391
|
+
const HSL: 'hsl';
|
|
1392
|
+
|
|
1393
|
+
const HSB: 'hsb';
|
|
1394
|
+
|
|
1395
|
+
const SRGB: 'srgb';
|
|
1396
|
+
|
|
1397
|
+
const DISPLAY_P3: 'display-p3';
|
|
1398
|
+
|
|
1399
|
+
class Color {
|
|
1400
|
+
constructor(c0: number, c1: number, c2: number, c3: number);
|
|
1401
|
+
|
|
1402
|
+
igual(otro: Color): boolean;
|
|
1403
|
+
|
|
1404
|
+
esMismoColor(otro: Color): boolean;
|
|
1405
|
+
|
|
1406
|
+
toString(): string;
|
|
1407
|
+
|
|
1408
|
+
niveles: number[];
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
// 💅 styles
|
|
1412
|
+
|
|
1413
|
+
/** 💅
|
|
1414
|
+
* Establece el color de relleno. El defecto es blanco.
|
|
1415
|
+
*
|
|
1416
|
+
* Como la función [`color`](https://q5js.org/learn/#color), esta función
|
|
1417
|
+
* puede aceptar colores en una amplia gama de formatos: como una cadena de color CSS,
|
|
1418
|
+
* un objeto `Color`, valor de escala de grises, o valores de componentes de color.
|
|
1419
|
+
* @param {Color} color color de relleno
|
|
1420
|
+
* @example
|
|
1421
|
+
* crearLienzo(200);
|
|
1422
|
+
* fondo(200);
|
|
1423
|
+
*
|
|
1424
|
+
* relleno('red');
|
|
1425
|
+
* círculo(80, 80, 80);
|
|
1426
|
+
*
|
|
1427
|
+
* relleno('lime');
|
|
1428
|
+
* cuadrado(80, 80, 80);
|
|
1429
|
+
*/
|
|
1430
|
+
function relleno(color: Color): void;
|
|
1431
|
+
|
|
1432
|
+
/** 💅
|
|
1433
|
+
* Establece el color del trazo (contorno). El defecto es negro.
|
|
1434
|
+
*
|
|
1435
|
+
* Como la función [`color`](https://q5js.org/learn/#color), esta función
|
|
1436
|
+
* puede aceptar colores en una amplia gama de formatos: como una cadena de color CSS,
|
|
1437
|
+
* un objeto `Color`, valor de escala de grises, o valores de componentes de color.
|
|
1438
|
+
* @param {Color} color color de trazo
|
|
1439
|
+
* @example
|
|
1440
|
+
* crearLienzo(200);
|
|
1441
|
+
* fondo(200);
|
|
1442
|
+
* relleno(36);
|
|
1443
|
+
*
|
|
1444
|
+
* trazo('red');
|
|
1445
|
+
* círculo(80, 80, 80);
|
|
1446
|
+
*
|
|
1447
|
+
* trazo('lime');
|
|
1448
|
+
* cuadrado(80, 80, 80);
|
|
1449
|
+
*/
|
|
1450
|
+
function trazo(color: Color): void;
|
|
1451
|
+
|
|
1452
|
+
/** 💅
|
|
1453
|
+
* Después de llamar a esta función, el dibujo no será rellenado.
|
|
1454
|
+
* @example
|
|
1455
|
+
* crearLienzo(200);
|
|
1456
|
+
* fondo(200);
|
|
1457
|
+
*
|
|
1458
|
+
* sinRelleno();
|
|
1459
|
+
*
|
|
1460
|
+
* trazo('red');
|
|
1461
|
+
* círculo(80, 80, 80);
|
|
1462
|
+
* trazo('lime');
|
|
1463
|
+
* cuadrado(80, 80, 80);
|
|
1464
|
+
*/
|
|
1465
|
+
function sinRelleno(): void;
|
|
1466
|
+
|
|
1467
|
+
/** 💅
|
|
1468
|
+
* Después de llamar a esta función, el dibujo no tendrá un trazo (contorno).
|
|
1469
|
+
* @example
|
|
1470
|
+
* crearLienzo(200);
|
|
1471
|
+
* fondo(200);
|
|
1472
|
+
* relleno(36);
|
|
1473
|
+
* trazo('red');
|
|
1474
|
+
* círculo(80, 80, 80);
|
|
1475
|
+
*
|
|
1476
|
+
* sinTrazo();
|
|
1477
|
+
* cuadrado(80, 80, 80);
|
|
1478
|
+
*/
|
|
1479
|
+
function sinTrazo(): void;
|
|
1480
|
+
|
|
1481
|
+
/** 💅
|
|
1482
|
+
* Establece el tamaño del trazo usado para líneas y el borde alrededor de dibujos.
|
|
1483
|
+
* @param {number} grosor tamaño del trazo en píxeles
|
|
1484
|
+
* @example
|
|
1485
|
+
* crearLienzo(200);
|
|
1486
|
+
* fondo(200);
|
|
1487
|
+
* trazo('red');
|
|
1488
|
+
* círculo(50, 100, 80);
|
|
1489
|
+
*
|
|
1490
|
+
* grosorTrazo(12);
|
|
1491
|
+
* círculo(150, 100, 80);
|
|
1492
|
+
*/
|
|
1493
|
+
function grosorTrazo(grosor: number): void;
|
|
1494
|
+
|
|
1495
|
+
/** 💅
|
|
1496
|
+
* Establece la opacidad global, que afecta a todas las operaciones de dibujo posteriores, excepto `fondo`. El defecto es 1, totalmente opaco.
|
|
1497
|
+
*
|
|
1498
|
+
* En q5 WebGPU esta función solo afecta a imágenes.
|
|
1499
|
+
* @param {number} alfa nivel de opacidad, variando de 0 a 1
|
|
1500
|
+
* @example
|
|
1501
|
+
* crearLienzo(200);
|
|
1502
|
+
* fondo(200);
|
|
1503
|
+
*
|
|
1504
|
+
* opacidad(1);
|
|
1505
|
+
* círculo(80, 80, 80);
|
|
1506
|
+
*
|
|
1507
|
+
* opacidad(0.2);
|
|
1508
|
+
* cuadrado(80, 80, 80);
|
|
1509
|
+
*/
|
|
1510
|
+
function opacidad(alfa: number): void;
|
|
1511
|
+
|
|
1512
|
+
/** 💅
|
|
1513
|
+
* Establece el color de la sombra. El defecto es transparente (sin sombra).
|
|
1514
|
+
*
|
|
1515
|
+
* Las sombras se aplican a cualquier cosa dibujada en el lienzo, incluyendo formas rellenas,
|
|
1516
|
+
* trazos, texto, e imágenes.
|
|
1517
|
+
*
|
|
1518
|
+
* Como la función [`color`](https://q5js.org/learn/#color), esta función
|
|
1519
|
+
* puede aceptar colores en una amplia gama de formatos: como una cadena de color CSS,
|
|
1520
|
+
* un objeto `Color`, valor de escala de grises, o valores de componentes de color.
|
|
1521
|
+
*
|
|
1522
|
+
* No disponible en q5 WebGPU.
|
|
1523
|
+
* @param {Color} color color de sombra
|
|
1524
|
+
* @example
|
|
1525
|
+
* crearLienzo(200);
|
|
1526
|
+
* fondo(200);
|
|
1527
|
+
*
|
|
1528
|
+
* sinRelleno();
|
|
1529
|
+
* sombra('black');
|
|
1530
|
+
* rect(64, 60, 80, 80);
|
|
1531
|
+
* @example
|
|
1532
|
+
* crearLienzo(200);
|
|
1533
|
+
* let logo = cargarImagen('/assets/p5play_logo.webp');
|
|
1534
|
+
*
|
|
1535
|
+
* function setup() {
|
|
1536
|
+
* fondo(200);
|
|
1537
|
+
* sombra(0);
|
|
1538
|
+
* imagen(logo, 36, 36, 128, 128);
|
|
1539
|
+
* }
|
|
1540
|
+
*/
|
|
1541
|
+
function sombra(color: string | Color): void;
|
|
1542
|
+
|
|
1543
|
+
/** 💅
|
|
1544
|
+
* Deshabilita el efecto de sombra.
|
|
1545
|
+
*
|
|
1546
|
+
* No disponible en q5 WebGPU.
|
|
1547
|
+
* @example
|
|
1548
|
+
* crearLienzo(200);
|
|
1549
|
+
* fondo(200);
|
|
1550
|
+
* sinTrazo();
|
|
1551
|
+
* sombra('black');
|
|
1552
|
+
* rect(14, 14, 80, 80);
|
|
1553
|
+
*
|
|
1554
|
+
* sinSombra();
|
|
1555
|
+
* rect(104, 104, 80, 80);
|
|
1556
|
+
*/
|
|
1557
|
+
function sinSombra(): void;
|
|
1558
|
+
|
|
1559
|
+
/** 💅
|
|
1560
|
+
* Establece el desplazamiento de la sombra y el radio de desenfoque.
|
|
1561
|
+
*
|
|
1562
|
+
* Cuando q5 comienza, el desplazamiento de la sombra es (10, 10) con un desenfoque de 10.
|
|
1563
|
+
*
|
|
1564
|
+
* No disponible en q5 WebGPU.
|
|
1565
|
+
* @param {number} offsetX desplazamiento horizontal de la sombra
|
|
1566
|
+
* @param {number} offsetY desplazamiento vertical de la sombra, por defecto es el mismo que offsetX
|
|
1567
|
+
* @param {number} desenfoque radio de desenfoque de la sombra, por defecto es 0
|
|
1568
|
+
* @example
|
|
1569
|
+
* crearLienzo(200);
|
|
1570
|
+
* sinTrazo();
|
|
1571
|
+
* sombra(50);
|
|
1572
|
+
*
|
|
1573
|
+
* function dibujar() {
|
|
1574
|
+
* fondo(200);
|
|
1575
|
+
* cajaSombra(-20, ratónY, 10);
|
|
1576
|
+
* círculo(100, 100, 80, 80);
|
|
1577
|
+
* }
|
|
1578
|
+
* @example
|
|
1579
|
+
* crearLienzo(200);
|
|
1580
|
+
* fondo(200);
|
|
1581
|
+
* sinTrazo();
|
|
1582
|
+
*
|
|
1583
|
+
* sombra('aqua');
|
|
1584
|
+
* cajaSombra(20);
|
|
1585
|
+
* rect(50, 50, 100, 100);
|
|
1586
|
+
* tamañoTexto(64);
|
|
1587
|
+
* texto('q5', 60, 115);
|
|
1588
|
+
*/
|
|
1589
|
+
function cajaSombra(offsetX: number, offsetY: number, desenfoque: number): void;
|
|
1590
|
+
|
|
1591
|
+
/** 💅
|
|
1592
|
+
* Establece la operación de composición global para el contexto del lienzo.
|
|
1593
|
+
*
|
|
1594
|
+
* No disponible en q5 WebGPU.
|
|
1595
|
+
* @param {string} val operación de composición
|
|
1596
|
+
*/
|
|
1597
|
+
function modoMezcla(val: string): void;
|
|
1598
|
+
|
|
1599
|
+
/** 💅
|
|
1600
|
+
* Establece el estilo de terminación de línea a `ROUND`, `SQUARE`, o `PROJECT`.
|
|
1601
|
+
*
|
|
1602
|
+
* No disponible en q5 WebGPU.
|
|
1603
|
+
* @param {CanvasLineCap} val estilo de terminación de línea
|
|
1604
|
+
* @example
|
|
1605
|
+
* crearLienzo(200);
|
|
1606
|
+
* fondo(200);
|
|
1607
|
+
* grosorTrazo(20);
|
|
1608
|
+
*
|
|
1609
|
+
* terminaciónTrazo(ROUND);
|
|
1610
|
+
* línea(50, 50, 150, 50);
|
|
1611
|
+
*
|
|
1612
|
+
* terminaciónTrazo(SQUARE);
|
|
1613
|
+
* línea(50, 100, 150, 100);
|
|
1614
|
+
*
|
|
1615
|
+
* terminaciónTrazo(PROJECT);
|
|
1616
|
+
* línea(50, 150, 150, 150);
|
|
1617
|
+
*/
|
|
1618
|
+
function terminaciónTrazo(): void;
|
|
1619
|
+
|
|
1620
|
+
/** 💅
|
|
1621
|
+
* Establece el estilo de unión de línea a `ROUND`, `BEVEL`, o `MITER`.
|
|
1622
|
+
*
|
|
1623
|
+
* No disponible en q5 WebGPU.
|
|
1624
|
+
* @param {CanvasLineJoin} val estilo de unión de línea
|
|
1625
|
+
* @example
|
|
1626
|
+
* crearLienzo(200);
|
|
1627
|
+
* fondo(200);
|
|
1628
|
+
* grosorTrazo(10);
|
|
1629
|
+
*
|
|
1630
|
+
* uniónTrazo(ROUND);
|
|
1631
|
+
* triángulo(50, 20, 150, 20, 50, 70);
|
|
1632
|
+
*
|
|
1633
|
+
* uniónTrazo(BEVEL);
|
|
1634
|
+
* triángulo(150, 50, 50, 100, 150, 150);
|
|
1635
|
+
*
|
|
1636
|
+
* uniónTrazo(MITER);
|
|
1637
|
+
* triángulo(50, 130, 150, 180, 50, 180);
|
|
1638
|
+
*/
|
|
1639
|
+
function uniónTrazo(): void;
|
|
1640
|
+
|
|
1641
|
+
/** 💅
|
|
1642
|
+
* Establece el lienzo en modo borrar, donde las formas borrarán lo que está
|
|
1643
|
+
* debajo de ellas en lugar de dibujar sobre ello.
|
|
1644
|
+
*
|
|
1645
|
+
* No disponible en q5 WebGPU.
|
|
1646
|
+
* @param {number} [rellenoAlfa] nivel de opacidad del color de relleno
|
|
1647
|
+
* @param {number} [trazoAlfa] nivel de opacidad del color de trazo
|
|
1648
|
+
*/
|
|
1649
|
+
function borrar(rellenoAlfa?: number, trazoAlfa?: number): void;
|
|
1650
|
+
|
|
1651
|
+
/** 💅
|
|
1652
|
+
* Reinicia el lienzo del modo borrar al modo de dibujo normal.
|
|
1653
|
+
*
|
|
1654
|
+
* No disponible en q5 WebGPU.
|
|
1655
|
+
*/
|
|
1656
|
+
function noBorrar(): void;
|
|
1657
|
+
|
|
1658
|
+
/** 💅
|
|
1659
|
+
* Guarda la configuración de estilo de dibujo actual.
|
|
1660
|
+
*
|
|
1661
|
+
* Esto incluye el relleno, trazo, grosor de trazo, tinte, modo de imagen,
|
|
1662
|
+
* modo de rectángulo, modo de elipse, tamaño de texto, alineación de texto, línea base de texto, y
|
|
1663
|
+
* configuración de sombra.
|
|
1664
|
+
* @example
|
|
1665
|
+
* crearLienzo(200);
|
|
1666
|
+
* fondo(200);
|
|
1667
|
+
*
|
|
1668
|
+
* guardarEstilos();
|
|
1669
|
+
* relleno('blue');
|
|
1670
|
+
* círculo(50, 50, 80);
|
|
1671
|
+
*
|
|
1672
|
+
* recuperarEstilos();
|
|
1673
|
+
* círculo(150, 150, 80);
|
|
1674
|
+
*/
|
|
1675
|
+
function guardarEstilos(): void;
|
|
1676
|
+
|
|
1677
|
+
/** 💅
|
|
1678
|
+
* Restaura la configuración de estilo de dibujo guardada previamente.
|
|
1679
|
+
* @example
|
|
1680
|
+
* crearLienzo(200);
|
|
1681
|
+
* fondo(200);
|
|
1682
|
+
*
|
|
1683
|
+
* guardarEstilos();
|
|
1684
|
+
* relleno('blue');
|
|
1685
|
+
* círculo(50, 50, 80);
|
|
1686
|
+
*
|
|
1687
|
+
* recuperarEstilos();
|
|
1688
|
+
* círculo(150, 150, 80);
|
|
1689
|
+
*/
|
|
1690
|
+
function recuperarEstilos(): void;
|
|
1691
|
+
|
|
1692
|
+
/** 💅
|
|
1693
|
+
* Limpia el lienzo, haciendo que cada píxel sea completamente transparente.
|
|
1694
|
+
*
|
|
1695
|
+
* Ten en cuenta que el lienzo solo se puede ver a través si tiene un canal alfa.
|
|
1696
|
+
*
|
|
1697
|
+
* #### webgpu
|
|
1698
|
+
* @example
|
|
1699
|
+
* crearLienzo(200, 200, { alpha: true });
|
|
1700
|
+
*
|
|
1701
|
+
* function dibujar() {
|
|
1702
|
+
* limpiar();
|
|
1703
|
+
* círculo(frameCount % 200, 100, 80);
|
|
1704
|
+
* }
|
|
1705
|
+
*/
|
|
1706
|
+
function limpiar(): void;
|
|
1707
|
+
|
|
1708
|
+
/** 💅
|
|
1709
|
+
* Comprueba si un punto dado está dentro del área de relleno del camino actual.
|
|
1710
|
+
*
|
|
1711
|
+
* No disponible en q5 WebGPU.
|
|
1712
|
+
* @param {number} x coordenada-x del punto
|
|
1713
|
+
* @param {number} y coordenada-y del punto
|
|
1714
|
+
* @returns {boolean} verdadero si el punto está dentro del área de relleno, falso de lo contrario
|
|
1715
|
+
*/
|
|
1716
|
+
function enRelleno(x: number, y: number): boolean;
|
|
1717
|
+
|
|
1718
|
+
/** 💅
|
|
1719
|
+
* Comprueba si un punto dado está dentro del trazo del camino actual.
|
|
1720
|
+
*
|
|
1721
|
+
* No disponible en q5 WebGPU.
|
|
1722
|
+
* @param {number} x coordenada-x del punto
|
|
1723
|
+
* @param {number} y coordenada-y del punto
|
|
1724
|
+
* @returns {boolean} verdadero si el punto está dentro del trazo, falso de lo contrario
|
|
1725
|
+
*/
|
|
1726
|
+
function enTrazo(x: number, y: number): boolean;
|
|
1727
|
+
|
|
1728
|
+
// 🦋 transforms
|
|
1729
|
+
|
|
1730
|
+
/** 🦋
|
|
1731
|
+
* Traslada el origen del contexto de dibujo.
|
|
1732
|
+
* @param {number} x traslación a lo largo del eje x
|
|
1733
|
+
* @param {number} y traslación a lo largo del eje y
|
|
1734
|
+
* @example
|
|
1735
|
+
* function dibujar() {
|
|
1736
|
+
* fondo(200);
|
|
1737
|
+
*
|
|
1738
|
+
* trasladar(150, 150);
|
|
1739
|
+
* círculo(0, 0, 80);
|
|
1740
|
+
* }
|
|
1741
|
+
*/
|
|
1742
|
+
function trasladar(x: number, y: number): void;
|
|
1743
|
+
|
|
1744
|
+
/** 🦋
|
|
1745
|
+
* Rota el contexto de dibujo.
|
|
1746
|
+
* @param {number} angulo ángulo de rotación en radianes
|
|
1747
|
+
* @example
|
|
1748
|
+
* function dibujar() {
|
|
1749
|
+
* fondo(200);
|
|
1750
|
+
*
|
|
1751
|
+
* trasladar(100, 100);
|
|
1752
|
+
* rotar(ratónX / 50);
|
|
1753
|
+
*
|
|
1754
|
+
* modoRect(CENTER);
|
|
1755
|
+
* cuadrado(0, 0, 50);
|
|
1756
|
+
* }
|
|
1757
|
+
*/
|
|
1758
|
+
function rotar(angulo: number): void;
|
|
1759
|
+
|
|
1760
|
+
/** 🦋
|
|
1761
|
+
* Escala el contexto de dibujo.
|
|
1762
|
+
*
|
|
1763
|
+
* Si solo se proporciona un parámetro de entrada,
|
|
1764
|
+
* el contexto de dibujo se escalará uniformemente.
|
|
1765
|
+
* @param {number} x factor de escala a lo largo del eje x
|
|
1766
|
+
* @param {number} [y] factor de escala a lo largo del eje y
|
|
1767
|
+
* @example
|
|
1768
|
+
* function dibujar() {
|
|
1769
|
+
* fondo(200);
|
|
1770
|
+
*
|
|
1771
|
+
* escalar(ratónX / 10);
|
|
1772
|
+
* círculo(0, 0, 20);
|
|
1773
|
+
* }
|
|
1774
|
+
*/
|
|
1775
|
+
function escalar(x: number, y?: number): void;
|
|
1776
|
+
|
|
1777
|
+
/** 🦋
|
|
1778
|
+
* Cizalla el contexto de dibujo a lo largo del eje x.
|
|
1779
|
+
* @param {number} angulo ángulo de cizallamiento en radianes
|
|
1780
|
+
* @example
|
|
1781
|
+
* function dibujar() {
|
|
1782
|
+
* fondo(200);
|
|
1783
|
+
*
|
|
1784
|
+
* trasladar(25, 60);
|
|
1785
|
+
* cizallarX(ratónX / 100);
|
|
1786
|
+
* cuadrado(0, 0, 80);
|
|
1787
|
+
* }
|
|
1788
|
+
*/
|
|
1789
|
+
function cizallarX(angulo: number): void;
|
|
1790
|
+
|
|
1791
|
+
/** 🦋
|
|
1792
|
+
* Cizalla el contexto de dibujo a lo largo del eje y.
|
|
1793
|
+
* @param {number} angulo ángulo de cizallamiento en radianes
|
|
1794
|
+
* @example
|
|
1795
|
+
* function dibujar() {
|
|
1796
|
+
* fondo(200);
|
|
1797
|
+
*
|
|
1798
|
+
* trasladar(25, 60);
|
|
1799
|
+
* cizallarY(ratónX / 100);
|
|
1800
|
+
* cuadrado(0, 0, 80);
|
|
1801
|
+
* }
|
|
1802
|
+
*/
|
|
1803
|
+
function cizallarY(angulo: number): void;
|
|
1804
|
+
|
|
1805
|
+
/** 🦋
|
|
1806
|
+
* Aplica una matriz de transformación.
|
|
1807
|
+
*
|
|
1808
|
+
* Acepta una matriz de 3x3 como un array o múltiples argumentos.
|
|
1809
|
+
* @param {number} a
|
|
1810
|
+
* @param {number} b
|
|
1811
|
+
* @param {number} c
|
|
1812
|
+
* @param {number} d
|
|
1813
|
+
* @param {number} e
|
|
1814
|
+
* @param {number} f
|
|
1815
|
+
* @example
|
|
1816
|
+
* function dibujar() {
|
|
1817
|
+
* fondo(200);
|
|
1818
|
+
*
|
|
1819
|
+
* aplicarMatriz(2, 1, 1, 1, 100, 100);
|
|
1820
|
+
* círculo(0, 0, 80);
|
|
1821
|
+
* }
|
|
1822
|
+
*/
|
|
1823
|
+
function aplicarMatriz(a: number, b: number, c: number, d: number, e: number, f: number): void;
|
|
1824
|
+
|
|
1825
|
+
/** 🦋
|
|
1826
|
+
* Reinicia la matriz de transformación.
|
|
1827
|
+
*
|
|
1828
|
+
* q5 ejecuta esta función antes de cada vez que se ejecuta la función `dibujar`,
|
|
1829
|
+
* para que las transformaciones no se trasladen al siguiente fotograma.
|
|
1830
|
+
* @example
|
|
1831
|
+
* crearLienzo(200);
|
|
1832
|
+
* fondo(200);
|
|
1833
|
+
*
|
|
1834
|
+
* trasladar(100, 100);
|
|
1835
|
+
* círculo(0, 0, 80);
|
|
1836
|
+
*
|
|
1837
|
+
* reiniciarMatriz();
|
|
1838
|
+
* cuadrado(0, 0, 50);
|
|
1839
|
+
*/
|
|
1840
|
+
function reiniciarMatriz(): void;
|
|
1841
|
+
|
|
1842
|
+
/** 🦋
|
|
1843
|
+
* Guarda la matriz de transformación actual.
|
|
1844
|
+
* @example
|
|
1845
|
+
* crearLienzo(200);
|
|
1846
|
+
* fondo(200);
|
|
1847
|
+
* trasladar(100, 100);
|
|
1848
|
+
*
|
|
1849
|
+
* guardarMatriz();
|
|
1850
|
+
* rotar(CUARTO_PI);
|
|
1851
|
+
* elipse(0, 0, 120, 40);
|
|
1852
|
+
* recuperarMatriz();
|
|
1853
|
+
*
|
|
1854
|
+
* elipse(0, 0, 120, 40);
|
|
1855
|
+
*/
|
|
1856
|
+
function guardarMatriz(): void;
|
|
1857
|
+
|
|
1858
|
+
/** 🦋
|
|
1859
|
+
* Restaura la matriz de transformación guardada previamente.
|
|
1860
|
+
* @example
|
|
1861
|
+
* crearLienzo(200);
|
|
1862
|
+
* fondo(200);
|
|
1863
|
+
* trasladar(100, 100);
|
|
1864
|
+
*
|
|
1865
|
+
* guardarMatriz();
|
|
1866
|
+
* rotar(CUARTO_PI);
|
|
1867
|
+
* elipse(0, 0, 120, 40);
|
|
1868
|
+
* recuperarMatriz();
|
|
1869
|
+
*
|
|
1870
|
+
* elipse(0, 0, 120, 40);
|
|
1871
|
+
*/
|
|
1872
|
+
function recuperarMatriz(): void;
|
|
1873
|
+
|
|
1874
|
+
/** 🦋
|
|
1875
|
+
* Guarda la configuración de estilo de dibujo y transformaciones actuales.
|
|
1876
|
+
* @example
|
|
1877
|
+
* crearLienzo(200);
|
|
1878
|
+
*
|
|
1879
|
+
* guardar();
|
|
1880
|
+
* relleno('blue');
|
|
1881
|
+
* trasladar(100, 100);
|
|
1882
|
+
* círculo(0, 0, 80);
|
|
1883
|
+
* recuperar();
|
|
1884
|
+
*
|
|
1885
|
+
* cuadrado(0, 0, 50);
|
|
1886
|
+
*/
|
|
1887
|
+
function guardar(datos?: object, nombreArchivo?: string): void;
|
|
1888
|
+
|
|
1889
|
+
/** 🦋
|
|
1890
|
+
* Restaura la configuración de estilo de dibujo y transformaciones guardadas previamente.
|
|
1891
|
+
* @example
|
|
1892
|
+
* crearLienzo(200);
|
|
1893
|
+
*
|
|
1894
|
+
* guardar();
|
|
1895
|
+
* relleno('blue');
|
|
1896
|
+
* trasladar(100, 100);
|
|
1897
|
+
* círculo(0, 0, 80);
|
|
1898
|
+
* recuperar();
|
|
1899
|
+
*
|
|
1900
|
+
* cuadrado(0, 0, 50);
|
|
1901
|
+
*/
|
|
1902
|
+
function recuperar(): void;
|
|
1903
|
+
|
|
1904
|
+
// 💻 display
|
|
1905
|
+
|
|
1906
|
+
/** 💻
|
|
1907
|
+
* El ancho de la ventana (cantidad de píxeles). Atajo para `window.innerWidth`.
|
|
1908
|
+
*/
|
|
1909
|
+
var anchoVentana: number;
|
|
1910
|
+
|
|
1911
|
+
/** 💻
|
|
1912
|
+
* El alto de la ventana (cantidad de píxeles). Atajo para `window.innerHeight`.
|
|
1913
|
+
*/
|
|
1914
|
+
var altoVentana: number;
|
|
1915
|
+
|
|
1916
|
+
/** 💻
|
|
1917
|
+
* Número del cuadro actual, es decir, la cantidad de cuadros que se han dibujado desde que se inició el sketch.
|
|
1918
|
+
*/
|
|
1919
|
+
var cuadroActual: number;
|
|
1920
|
+
|
|
1921
|
+
/** 💻
|
|
1922
|
+
* Detiene el bucle de dibujo.
|
|
1923
|
+
*/
|
|
1924
|
+
function pausar(): void;
|
|
1925
|
+
|
|
1926
|
+
/** 💻
|
|
1927
|
+
* Dibuja el lienzo `n` veces. Si no recibe parametro, se dibuja una sola vez. Útil para controlar animaciones con el bucle pausado.
|
|
1928
|
+
* @param {number} [n] cantidad de veces que se volverá a dibujar el lienzo, por defecto es 1
|
|
1929
|
+
*/
|
|
1930
|
+
function redibujar(n?: number): void;
|
|
1931
|
+
|
|
1932
|
+
/** 💻
|
|
1933
|
+
* Vuelve a activar el bucle de dibujo en caso de que estuviera pausado.
|
|
1934
|
+
*/
|
|
1935
|
+
function reanudar(): void;
|
|
1936
|
+
|
|
1937
|
+
/** 💻
|
|
1938
|
+
* Si recibe un parámetro, establece la cantidad ideal de cuadros que se intentarán dibujar por cada segundo (es decir, la tasa de refresco, la frecuencia del bucle).
|
|
1939
|
+
*
|
|
1940
|
+
* Retorna la frecuencia real alcanzada durante el último segundo de ejecución. Incluso si nunca se modifica explícitamente la frecuencia, el valor real suele fluctuar entre el ideal y 0. Para un mejor análisis del rendimiento usar las herramientas del navegador (DevTools).
|
|
1941
|
+
* @param `hz` {number} [frecuencia] cantidad ideal de cuadros a dibujar en un segundo, por defecto es 60
|
|
1942
|
+
* @returns {number} frecuencia real del bucle en el último segundo
|
|
1943
|
+
*/
|
|
1944
|
+
function frecuenciaRefresco(hertz?: number): number;
|
|
1945
|
+
|
|
1946
|
+
/** 💻
|
|
1947
|
+
* Retorna la cantidad ideal de cuadros que se intentan dibujar por segundo.
|
|
1948
|
+
*/
|
|
1949
|
+
function frecuenciaIdeal(): void;
|
|
1950
|
+
|
|
1951
|
+
/** 💻
|
|
1952
|
+
* Retorna la cantidad maxima de cuadros que se podrían estar dibujando en cada segundo.
|
|
1953
|
+
*
|
|
1954
|
+
* Es un valor teórico que depende del estado del dispositivo. Para un mejor análisis del rendimiento usar las herramientas del navegador (DevTools).
|
|
1955
|
+
* @returns {number} cantidad máxima teorica de cuadros por segundo
|
|
1956
|
+
*/
|
|
1957
|
+
function frecuenciaMaxima(): void;
|
|
1958
|
+
|
|
1959
|
+
/** 💻
|
|
1960
|
+
* Funcion a declarar. Se ejecuta después de cada llamada a `dibujar` y de los `hooks de dibujo`, pero antes de dibujar realmente el lienzo.
|
|
1961
|
+
*
|
|
1962
|
+
* Útil para agregar efectos finales cuando es difícil hacerlo en la función de dibujo. Por ejemplo, al usar extensiones como p5play que dibujan capas superpuestas al lienzo.
|
|
1963
|
+
*/
|
|
1964
|
+
function retocarDibujo(): void;
|
|
1965
|
+
|
|
1966
|
+
/** 💻
|
|
1967
|
+
* Milisegundos que han pasado desde el último cuadro dibujado. Con la frecuencia por defecto a 60 hz, el tiempo aproximado es 16.6 ms o mas.
|
|
1968
|
+
*
|
|
1969
|
+
* Útil para mantener las animaciones sincronizadas con precisión, sobretodo si existen momentos en que la ejecución se ralentiza por sobrecarga del dispositivo. En casos en que la frecuencia real del bucle sea considerablemente mas baja, es recomendable reducir la frecuencia ideal.
|
|
1970
|
+
*/
|
|
1971
|
+
function ultimoTiempo(): void;
|
|
1972
|
+
|
|
1973
|
+
const MAXIMIZADO: 'maxed';
|
|
1974
|
+
|
|
1975
|
+
const SUAVE: 'smooth';
|
|
1976
|
+
|
|
1977
|
+
const PIXELADO: 'pixelated';
|
|
1978
|
+
|
|
1979
|
+
function pantallaCompleta(v?: boolean): void;
|
|
1980
|
+
|
|
1981
|
+
var ancho: number;
|
|
1982
|
+
|
|
1983
|
+
var alto: number;
|
|
1984
|
+
|
|
1985
|
+
var medioAncho: number;
|
|
1986
|
+
|
|
1987
|
+
var medioAlto: number;
|
|
1988
|
+
|
|
1989
|
+
var lienzo: HTMLCanvasElement;
|
|
1990
|
+
|
|
1991
|
+
function redimensionarLienzo(w: number, h: number): void;
|
|
1992
|
+
|
|
1993
|
+
function obtenerTasaFotogramasObjetivo(): number;
|
|
1994
|
+
|
|
1995
|
+
function obtenerFPS(): number;
|
|
1996
|
+
|
|
1997
|
+
function postProcesar(): void;
|
|
1998
|
+
|
|
1999
|
+
var deltaTiempo: number;
|
|
2000
|
+
|
|
2001
|
+
var contextoDibujo: CanvasRenderingContext2D;
|
|
2002
|
+
|
|
2003
|
+
// 🧮 math
|
|
2004
|
+
|
|
2005
|
+
/** 🧮
|
|
2006
|
+
* Genera un valor aleatorio.
|
|
2007
|
+
*
|
|
2008
|
+
* - Si no se proporcionan entradas, devuelve un número entre 0 y 1.
|
|
2009
|
+
* - Si se proporciona una entrada numérica, devuelve un número entre 0 y el valor proporcionado.
|
|
2010
|
+
* - Si se proporcionan dos entradas numéricas, devuelve un número entre los dos valores.
|
|
2011
|
+
* - Si se proporciona un array, devuelve un elemento aleatorio del array.
|
|
2012
|
+
* @param {number | any[]} [bajo] límite inferior (inclusivo) o un array
|
|
2013
|
+
* @param {number} [alto] límite superior (exclusivo)
|
|
2014
|
+
* @returns {number | any} un número o elemento aleatorio
|
|
2015
|
+
* @example
|
|
2016
|
+
* crearLienzo(200);
|
|
2017
|
+
* fondo(200);
|
|
2018
|
+
* frecuenciaRefresco(5);
|
|
2019
|
+
*
|
|
2020
|
+
* function dibujar() {
|
|
2021
|
+
* círculo(100, 100, aleatorio(20, 200));
|
|
2022
|
+
* }
|
|
2023
|
+
* @example
|
|
2024
|
+
* function dibujar() {
|
|
2025
|
+
* círculo(aleatorio(200), aleatorio(200), 10);
|
|
2026
|
+
* }
|
|
2027
|
+
*/
|
|
2028
|
+
function aleatorio(bajo?: number | any[], alto?: number): number | any;
|
|
2029
|
+
|
|
2030
|
+
/** 🧮
|
|
2031
|
+
* Genera un número aleatorio dentro de un rango simétrico alrededor de cero.
|
|
2032
|
+
*
|
|
2033
|
+
* Se puede usar para crear un efecto de fluctuación (desplazamiento aleatorio).
|
|
2034
|
+
*
|
|
2035
|
+
* Equivalente a `aleatorio(-cantidad, cantidad)`.
|
|
2036
|
+
* @param {number} cantidad cantidad máxima absoluta de fluctuación, por defecto es 1
|
|
2037
|
+
* @returns {number} número aleatorio entre -val y val
|
|
2038
|
+
* @example
|
|
2039
|
+
* function dibujar() {
|
|
2040
|
+
* círculo(ratónX + flu(3), ratónY + flu(3), 5);
|
|
2041
|
+
* }
|
|
2042
|
+
* @example
|
|
2043
|
+
* let q = await Q5.WebGPU();
|
|
2044
|
+
* crearLienzo(200, 100);
|
|
2045
|
+
*
|
|
2046
|
+
* q.dibujar = () => {
|
|
2047
|
+
* círculo(flu(50), 0, aleatorio(50));
|
|
2048
|
+
* };
|
|
2049
|
+
*/
|
|
2050
|
+
function flu(cantidad: number): number;
|
|
2051
|
+
|
|
2052
|
+
/** 🧮
|
|
2053
|
+
* Genera un valor de ruido basado en las entradas x, y, y z.
|
|
2054
|
+
*
|
|
2055
|
+
* Usa [Ruido Perlin](https://es.wikipedia.org/wiki/Ruido_Perlin) por defecto.
|
|
2056
|
+
* @param {number} [x] entrada coordenada-x
|
|
2057
|
+
* @param {number} [y] entrada coordenada-y
|
|
2058
|
+
* @param {number} [z] entrada coordenada-z
|
|
2059
|
+
* @returns {number} un valor de ruido
|
|
2060
|
+
* @example
|
|
2061
|
+
* function dibujar() {
|
|
2062
|
+
* fondo(200);
|
|
2063
|
+
* let n = ruido(frameCount * 0.01);
|
|
2064
|
+
* círculo(100, 100, n * 200);
|
|
2065
|
+
* }
|
|
2066
|
+
* @example
|
|
2067
|
+
* function dibujar() {
|
|
2068
|
+
* fondo(200);
|
|
2069
|
+
* let t = (frameCount + ratónX) * 0.02;
|
|
2070
|
+
* for (let x = -5; x < 220; x += 10) {
|
|
2071
|
+
* let n = ruido(t, x * 0.1);
|
|
2072
|
+
* círculo(x, 100, n * 40);
|
|
2073
|
+
* }
|
|
2074
|
+
* }
|
|
2075
|
+
*/
|
|
2076
|
+
function ruido(x?: number, y?: number, z?: number): number;
|
|
2077
|
+
|
|
2078
|
+
/** 🧮
|
|
2079
|
+
* Calcula la distancia entre dos puntos.
|
|
2080
|
+
*
|
|
2081
|
+
* Esta función también acepta dos objetos con propiedades `x` e `y`.
|
|
2082
|
+
* @param {number} x1 coordenada-x del primer punto
|
|
2083
|
+
* @param {number} y1 coordenada-y del primer punto
|
|
2084
|
+
* @param {number} x2 coordenada-x del segundo punto
|
|
2085
|
+
* @param {number} y2 coordenada-y del segundo punto
|
|
2086
|
+
* @returns {number} distancia entre los puntos
|
|
2087
|
+
* @example
|
|
2088
|
+
* function dibujar() {
|
|
2089
|
+
* fondo(200);
|
|
2090
|
+
* círculo(100, 100, 20);
|
|
2091
|
+
* círculo(ratónX, ratónY, 20);
|
|
2092
|
+
*
|
|
2093
|
+
* let d = dist(100, 100, ratónX, ratónY);
|
|
2094
|
+
* texto(redondear(d), 20, 20);
|
|
2095
|
+
* }
|
|
2096
|
+
*/
|
|
2097
|
+
function dist(x1: number, y1: number, x2: number, y2: number): number;
|
|
2098
|
+
|
|
2099
|
+
/** 🧮
|
|
2100
|
+
* Mapea un número de un rango a otro.
|
|
2101
|
+
* @param {number} val valor entrante a convertir
|
|
2102
|
+
* @param {number} inicio1 límite inferior del rango actual del valor
|
|
2103
|
+
* @param {number} fin1 límite superior del rango actual del valor
|
|
2104
|
+
* @param {number} inicio2 límite inferior del rango objetivo del valor
|
|
2105
|
+
* @param {number} fin2 límite superior del rango objetivo del valor
|
|
2106
|
+
* @returns {number} valor mapeado
|
|
2107
|
+
*/
|
|
2108
|
+
function mapa(val: number, inicio1: number, fin1: number, inicio2: number, fin2: number): number;
|
|
2109
|
+
|
|
2110
|
+
/** 🧮
|
|
2111
|
+
* Establece el modo para interpretar y dibujar ángulos. Puede ser 'degrees' (grados) o 'radians' (radianes).
|
|
2112
|
+
* @param {'degrees' | 'radians'} modo modo a establecer para la interpretación de ángulos
|
|
2113
|
+
*/
|
|
2114
|
+
function modoÁngulo(): void;
|
|
2115
|
+
|
|
2116
|
+
/** 🧮
|
|
2117
|
+
* Convierte grados a radianes.
|
|
2118
|
+
* @param {number} grados ángulo en grados
|
|
2119
|
+
* @returns {number} ángulo en radianes
|
|
2120
|
+
*/
|
|
2121
|
+
function radianes(grados: number): number;
|
|
2122
|
+
|
|
2123
|
+
/** 🧮
|
|
2124
|
+
* Convierte radianes a grados.
|
|
2125
|
+
* @param {number} radianes ángulo en radianes
|
|
2126
|
+
* @returns {number} ángulo en grados
|
|
2127
|
+
*/
|
|
2128
|
+
function grados(radianes: number): number;
|
|
2129
|
+
|
|
2130
|
+
/** 🧮
|
|
2131
|
+
* Calcula un número entre dos números en un incremento específico.
|
|
2132
|
+
* @param {number} inicio primer número
|
|
2133
|
+
* @param {number} fin segundo número
|
|
2134
|
+
* @param {number} cant cantidad a interpolar entre los dos valores
|
|
2135
|
+
* @returns {number} número interpolado
|
|
2136
|
+
*/
|
|
2137
|
+
function interpolar(inicio: number, fin: number, cant: number): number;
|
|
2138
|
+
|
|
2139
|
+
/** 🧮
|
|
2140
|
+
* Restringe un valor entre un valor mínimo y máximo.
|
|
2141
|
+
* @param {number} n número a restringir
|
|
2142
|
+
* @param {number} bajo límite inferior
|
|
2143
|
+
* @param {number} alto límite superior
|
|
2144
|
+
* @returns {number} valor restringido
|
|
2145
|
+
*/
|
|
2146
|
+
function constreñir(): void;
|
|
2147
|
+
|
|
2148
|
+
/** 🧮
|
|
2149
|
+
* Normaliza un número de otro rango en un valor entre 0 y 1.
|
|
2150
|
+
* @param {number} n número a normalizar
|
|
2151
|
+
* @param {number} inicio límite inferior del rango
|
|
2152
|
+
* @param {number} fin límite superior del rango
|
|
2153
|
+
* @returns {number} número normalizado
|
|
2154
|
+
*/
|
|
2155
|
+
function norm(n: number, inicio: number, fin: number): number;
|
|
2156
|
+
|
|
2157
|
+
/** 🧮
|
|
2158
|
+
* Calcula la parte fraccionaria de un número.
|
|
2159
|
+
* @param {number} n un número
|
|
2160
|
+
* @returns {number} parte fraccionaria del número
|
|
2161
|
+
*/
|
|
2162
|
+
function frac(n: number): number;
|
|
2163
|
+
|
|
2164
|
+
/** 🧮
|
|
2165
|
+
* Calcula el valor absoluto de un número.
|
|
2166
|
+
* @param {number} n un número
|
|
2167
|
+
* @returns {number} valor absoluto del número
|
|
2168
|
+
*/
|
|
2169
|
+
function abs(n: number): number;
|
|
2170
|
+
|
|
2171
|
+
/** 🧮
|
|
2172
|
+
* Redondea un número.
|
|
2173
|
+
* @param {number} n número a redondear
|
|
2174
|
+
* @param {number} [d] número de lugares decimales a redondear
|
|
2175
|
+
* @returns {number} número redondeado
|
|
2176
|
+
* @example
|
|
2177
|
+
* crearLienzo(200, 100);
|
|
2178
|
+
* fondo(200);
|
|
2179
|
+
* tamañoTexto(32);
|
|
2180
|
+
* texto(redondear(PI, 5), 10, 60);
|
|
2181
|
+
*/
|
|
2182
|
+
function redondear(n: number, d: number): number;
|
|
2183
|
+
|
|
2184
|
+
/** 🧮
|
|
2185
|
+
* Redondea un número hacia arriba.
|
|
2186
|
+
* @param {number} n un número
|
|
2187
|
+
* @returns {number} número redondeado
|
|
2188
|
+
* @example
|
|
2189
|
+
* crearLienzo(200, 100);
|
|
2190
|
+
* fondo(200);
|
|
2191
|
+
* tamañoTexto(32);
|
|
2192
|
+
* texto(techo(PI), 10, 60);
|
|
2193
|
+
*/
|
|
2194
|
+
function techo(n: number): number;
|
|
2195
|
+
|
|
2196
|
+
/** 🧮
|
|
2197
|
+
* Redondea un número hacia abajo.
|
|
2198
|
+
* @param {number} n un número
|
|
2199
|
+
* @returns {number} número redondeado
|
|
2200
|
+
* @example
|
|
2201
|
+
* crearLienzo(200, 100);
|
|
2202
|
+
* fondo(200);
|
|
2203
|
+
* tamañoTexto(32);
|
|
2204
|
+
* texto(piso(-PI), 10, 60);
|
|
2205
|
+
*/
|
|
2206
|
+
function piso(n: number): number;
|
|
2207
|
+
|
|
2208
|
+
/** 🧮
|
|
2209
|
+
* Devuelve el valor más pequeño en una secuencia de números.
|
|
2210
|
+
* @param {...number} args números a comparar
|
|
2211
|
+
* @returns {number} mínimo
|
|
2212
|
+
* @example
|
|
2213
|
+
* function dibujar() {
|
|
2214
|
+
* fondo(min(ratónX, 100));
|
|
2215
|
+
* círculo(min(ratónX, 100), 0, 80);
|
|
2216
|
+
* }
|
|
2217
|
+
*/
|
|
2218
|
+
function min(...args: number[]): number;
|
|
2219
|
+
|
|
2220
|
+
/** 🧮
|
|
2221
|
+
* Devuelve el valor más grande en una secuencia de números.
|
|
2222
|
+
* @param {...number} args números a comparar
|
|
2223
|
+
* @returns {number} máximo
|
|
2224
|
+
* @example
|
|
2225
|
+
* function dibujar() {
|
|
2226
|
+
* fondo(max(ratónX, 100));
|
|
2227
|
+
* círculo(max(ratónX, 100), 0, 80);
|
|
2228
|
+
* }
|
|
2229
|
+
*/
|
|
2230
|
+
function max(...args: number[]): number;
|
|
2231
|
+
|
|
2232
|
+
/** 🧮
|
|
2233
|
+
* Calcula el valor de una base elevada a una potencia.
|
|
2234
|
+
*
|
|
2235
|
+
* Por ejemplo, `pot(2, 3)` calcula 2 _ 2 _ 2 que es 8.
|
|
2236
|
+
* @param {number} base base
|
|
2237
|
+
* @param {number} exponente exponente
|
|
2238
|
+
* @returns {number} base elevada a la potencia del exponente
|
|
2239
|
+
*/
|
|
2240
|
+
function pot(base: number, exponente: number): number;
|
|
2241
|
+
|
|
2242
|
+
/** 🧮
|
|
2243
|
+
* Calcula el cuadrado de un número.
|
|
2244
|
+
* @param {number} n número a elevar al cuadrado
|
|
2245
|
+
* @returns {number} cuadrado del número
|
|
2246
|
+
*/
|
|
2247
|
+
function cuad(n: number): number;
|
|
2248
|
+
|
|
2249
|
+
/** 🧮
|
|
2250
|
+
* Calcula la raíz cuadrada de un número.
|
|
2251
|
+
* @param {number} n un número
|
|
2252
|
+
* @returns {number} raíz cuadrada del número
|
|
2253
|
+
*/
|
|
2254
|
+
function raiz(n: number): number;
|
|
2255
|
+
|
|
2256
|
+
/** 🧮
|
|
2257
|
+
* Calcula el logaritmo natural (base e) de un número.
|
|
2258
|
+
* @param {number} n un número
|
|
2259
|
+
* @returns {number} logaritmo natural del número
|
|
2260
|
+
*/
|
|
2261
|
+
function loge(n: number): number;
|
|
2262
|
+
|
|
2263
|
+
/** 🧮
|
|
2264
|
+
* Calcula e elevado a la potencia de un número.
|
|
2265
|
+
* @param {number} exponente potencia a la que elevar e
|
|
2266
|
+
* @returns {number} e elevado a la potencia del exponente
|
|
2267
|
+
*/
|
|
2268
|
+
function exp(exponente: number): number;
|
|
2269
|
+
|
|
2270
|
+
/** 🧮
|
|
2271
|
+
* Establece la semilla para el generador de números aleatorios.
|
|
2272
|
+
* @param {number} semilla valor de la semilla
|
|
2273
|
+
*/
|
|
2274
|
+
function semillaAleatoria(semilla: number): void;
|
|
2275
|
+
|
|
2276
|
+
/** 🧮
|
|
2277
|
+
* Establece el método de generación de números aleatorios.
|
|
2278
|
+
* @param {any} metodo método a usar para la generación de números aleatorios
|
|
2279
|
+
*/
|
|
2280
|
+
function generadorAleatorio(metodo: any): void;
|
|
2281
|
+
|
|
2282
|
+
/** 🧮
|
|
2283
|
+
* Genera un número aleatorio siguiendo una distribución Gaussiana (normal).
|
|
2284
|
+
* @param {number} media media (centro) de la distribución
|
|
2285
|
+
* @param {number} std desviación estándar (dispersión o "ancho") de la distribución
|
|
2286
|
+
* @returns {number} un número aleatorio siguiendo una distribución Gaussiana
|
|
2287
|
+
*/
|
|
2288
|
+
function aleatorioGaussiano(media: number, std: number): number;
|
|
2289
|
+
|
|
2290
|
+
/** 🧮
|
|
2291
|
+
* Genera un número aleatorio siguiendo una distribución exponencial.
|
|
2292
|
+
* @returns {number} un número aleatorio siguiendo una distribución exponencial
|
|
2293
|
+
*/
|
|
2294
|
+
function aleatorioExponencial(): number;
|
|
2295
|
+
|
|
2296
|
+
/** 🧮
|
|
2297
|
+
* Establece el modo de generación de ruido.
|
|
2298
|
+
*
|
|
2299
|
+
* Solo el modo por defecto, "perlin", está incluido en q5.js. El uso de los
|
|
2300
|
+
* otros modos requiere el módulo q5-noiser.
|
|
2301
|
+
* @param {'perlin' | 'simplex' | 'blocky'} modo modo de generación de ruido
|
|
2302
|
+
*/
|
|
2303
|
+
function modoRuido(modo: 'perlin' | 'simplex' | 'blocky'): void;
|
|
2304
|
+
|
|
2305
|
+
/** 🧮
|
|
2306
|
+
* Establece el valor de la semilla para la generación de ruido.
|
|
2307
|
+
* @param {number} semilla valor de la semilla
|
|
2308
|
+
*/
|
|
2309
|
+
function semillaRuido(semilla: number): void;
|
|
2310
|
+
|
|
2311
|
+
/** 🧮
|
|
2312
|
+
* Establece el nivel de detalle para la generación de ruido.
|
|
2313
|
+
* @param {number} lod nivel de detalle (número de octavas)
|
|
2314
|
+
* @param {number} caida tasa de caída para cada octava
|
|
2315
|
+
*/
|
|
2316
|
+
function detalleRuido(lod: number, caida: number): void;
|
|
2317
|
+
|
|
2318
|
+
/** 🧮
|
|
2319
|
+
* La relación de la circunferencia de un círculo a su diámetro.
|
|
2320
|
+
* Aproximadamente 3.14159.
|
|
2321
|
+
*/
|
|
2322
|
+
const DOS_PI: number;
|
|
2323
|
+
|
|
2324
|
+
/** 🧮
|
|
2325
|
+
* 2 \* PI.
|
|
2326
|
+
* Aproximadamente 6.28319.
|
|
2327
|
+
*/
|
|
2328
|
+
const DOS_PI: number;
|
|
2329
|
+
|
|
2330
|
+
/** 🧮
|
|
2331
|
+
* 2 \* PI.
|
|
2332
|
+
* Aproximadamente 6.28319.
|
|
2333
|
+
*/
|
|
2334
|
+
function TAU(): void;
|
|
2335
|
+
|
|
2336
|
+
/** 🧮
|
|
2337
|
+
* Mitad de PI.
|
|
2338
|
+
* Aproximadamente 1.5708.
|
|
2339
|
+
*/
|
|
2340
|
+
const MEDIO_PI: number;
|
|
2341
|
+
|
|
2342
|
+
/** 🧮
|
|
2343
|
+
* Un cuarto de PI.
|
|
2344
|
+
* Aproximadamente 0.7854.
|
|
2345
|
+
*/
|
|
2346
|
+
const CUARTO_PI: number;
|
|
2347
|
+
|
|
2348
|
+
// 🔊 sound
|
|
2349
|
+
|
|
2350
|
+
/**
|
|
2351
|
+
* q5 incluye reproducción de sonido de baja latencia y capacidades básicas de mezcla
|
|
2352
|
+
* impulsadas por WebAudio.
|
|
2353
|
+
*
|
|
2354
|
+
* Para filtrado de audio, síntesis y análisis, considera usar el
|
|
2355
|
+
* addon [p5.sound](https://p5js.org/reference/p5.sound/) con q5.
|
|
2356
|
+
*/
|
|
2357
|
+
|
|
2358
|
+
/** 🔊
|
|
2359
|
+
* Carga datos de audio desde un archivo y devuelve un objeto `Sonido`.
|
|
2360
|
+
*
|
|
2361
|
+
* Usa funciones como `reproducir`, `pausar`, y `detener` para
|
|
2362
|
+
* controlar la reproducción. ¡Ten en cuenta que los sonidos solo pueden reproducirse después de la
|
|
2363
|
+
* primera interacción del usuario con la página!
|
|
2364
|
+
*
|
|
2365
|
+
* Establece `volumen` a un valor entre 0 (silencio) y 1 (volumen completo).
|
|
2366
|
+
* Establece `pan` a un valor entre -1 (izquierda) y 1 (derecha) para ajustar
|
|
2367
|
+
* la posición estéreo del sonido. Establece `bucle` a true para repetir el sonido.
|
|
2368
|
+
*
|
|
2369
|
+
* Usa `cargado`, `pausado`, y `terminado` para comprobar el estado del sonido.
|
|
2370
|
+
*
|
|
2371
|
+
* El archivo de sonido completo debe cargarse antes de que la reproducción pueda comenzar, usa `await` para esperar a que un sonido se cargue. Para transmitir archivos de audio más grandes usa la función `cargarAudio` en su lugar.
|
|
2372
|
+
* @param {string} url archivo de sonido
|
|
2373
|
+
* @returns {Sonido & PromiseLike<Sonido>} sonido
|
|
2374
|
+
* @example
|
|
2375
|
+
* crearLienzo(200);
|
|
2376
|
+
*
|
|
2377
|
+
* let sonido = cargarSonido('/assets/jump.wav');
|
|
2378
|
+
* sonido.volumen = 0.3;
|
|
2379
|
+
*
|
|
2380
|
+
* function alPresionarRatón() {
|
|
2381
|
+
* sonido.reproducir();
|
|
2382
|
+
* }
|
|
2383
|
+
*/
|
|
2384
|
+
function cargarSonido(url: string): Sonido & PromiseLike<Sonido>;
|
|
2385
|
+
|
|
2386
|
+
/** 🔊
|
|
2387
|
+
* Carga datos de audio desde un archivo y devuelve un [HTMLAudioElement](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement).
|
|
54
2388
|
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
2389
|
+
* El audio se considera cargado cuando se dispara el [evento canplaythrough](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/canplaythrough_event).
|
|
2390
|
+
*
|
|
2391
|
+
* ¡Ten en cuenta que el audio solo puede reproducirse después de la primera interacción
|
|
2392
|
+
* del usuario con la página!
|
|
2393
|
+
* @param url archivo de audio
|
|
2394
|
+
* @returns {HTMLAudioElement & PromiseLike<HTMLAudioElement>} un HTMLAudioElement
|
|
2395
|
+
* @example
|
|
2396
|
+
* crearLienzo(200);
|
|
2397
|
+
*
|
|
2398
|
+
* let audio = cargarAudio('/assets/retro.flac');
|
|
2399
|
+
* audio.volume = 0.4;
|
|
2400
|
+
*
|
|
2401
|
+
* function alPresionarRatón() {
|
|
2402
|
+
* audio.play();
|
|
2403
|
+
* }
|
|
59
2404
|
*/
|
|
60
|
-
function
|
|
2405
|
+
function cargarAudio(url: string): HTMLAudioElement & PromiseLike<HTMLAudioElement>;
|
|
61
2406
|
|
|
62
|
-
|
|
2407
|
+
/** 🔊
|
|
2408
|
+
* Devuelve el AudioContext en uso o undefined si no existe.
|
|
2409
|
+
* @returns {AudioContext} instancia de AudioContext
|
|
2410
|
+
*/
|
|
2411
|
+
function obtenerContextoAudio(): AudioContext | void;
|
|
63
2412
|
|
|
64
|
-
/**
|
|
65
|
-
*
|
|
2413
|
+
/** 🔊
|
|
2414
|
+
* Crea un nuevo AudioContext o lo reanuda si estaba suspendido.
|
|
2415
|
+
* @returns {Promise<void>} una promesa que se resuelve cuando el AudioContext se reanuda
|
|
66
2416
|
*/
|
|
67
|
-
|
|
2417
|
+
function iniciarAudioUsuario(): Promise<void>;
|
|
68
2418
|
|
|
69
|
-
|
|
70
|
-
|
|
2419
|
+
class Sonido {
|
|
2420
|
+
|
|
2421
|
+
/** 🔊
|
|
2422
|
+
* Crea un nuevo objeto `Q5.Sonido`.
|
|
2423
|
+
*/
|
|
2424
|
+
constructor();
|
|
2425
|
+
|
|
2426
|
+
/** 🔊
|
|
2427
|
+
* Establece el volumen del sonido a un valor entre
|
|
2428
|
+
* 0 (silencio) y 1 (volumen completo).
|
|
2429
|
+
*/
|
|
2430
|
+
volumen: number;
|
|
2431
|
+
|
|
2432
|
+
/** 🔊
|
|
2433
|
+
* Establece la posición estéreo del sonido entre -1 (izquierda) y 1 (derecha).
|
|
2434
|
+
*/
|
|
2435
|
+
pan: number;
|
|
2436
|
+
|
|
2437
|
+
/** 🔊
|
|
2438
|
+
* Establece a true para hacer que el sonido se repita continuamente.
|
|
2439
|
+
*/
|
|
2440
|
+
bucle: boolean;
|
|
2441
|
+
|
|
2442
|
+
/** 🔊
|
|
2443
|
+
* Verdadero si los datos de sonido han terminado de cargarse.
|
|
2444
|
+
*/
|
|
2445
|
+
cargado: boolean;
|
|
2446
|
+
|
|
2447
|
+
/** 🔊
|
|
2448
|
+
* Verdadero si el sonido está actualmente pausado.
|
|
2449
|
+
*/
|
|
2450
|
+
pausado: boolean;
|
|
2451
|
+
|
|
2452
|
+
/** 🔊
|
|
2453
|
+
* Verdadero si el sonido ha terminado de reproducirse.
|
|
2454
|
+
*/
|
|
2455
|
+
terminado: boolean;
|
|
2456
|
+
|
|
2457
|
+
/** 🔊
|
|
2458
|
+
* Reproduce el sonido.
|
|
2459
|
+
*
|
|
2460
|
+
* Si esta función se ejecuta cuando el sonido ya se está reproduciendo,
|
|
2461
|
+
* comenzará una nueva reproducción, causando un efecto de capas.
|
|
2462
|
+
*
|
|
2463
|
+
* Si esta función se ejecuta cuando el sonido está pausado,
|
|
2464
|
+
* todas las instancias de reproducción se reanudarán.
|
|
2465
|
+
*
|
|
2466
|
+
* Usa `await` para esperar a que el sonido termine de reproducirse.
|
|
2467
|
+
* @returns {Promise<void>} una promesa que se resuelve cuando el sonido termina de reproducirse
|
|
2468
|
+
*/
|
|
2469
|
+
reproducir(): void;
|
|
2470
|
+
|
|
2471
|
+
/** 🔊
|
|
2472
|
+
* Pausa el sonido, permitiendo que sea reanudado.
|
|
2473
|
+
*/
|
|
2474
|
+
pausar(): void;
|
|
2475
|
+
|
|
2476
|
+
/** 🔊
|
|
2477
|
+
* Detiene el sonido, reiniciando su posición de reproducción
|
|
2478
|
+
* al principio.
|
|
2479
|
+
*
|
|
2480
|
+
* Elimina todas las instancias de reproducción.
|
|
2481
|
+
*/
|
|
2482
|
+
detener(): void;
|
|
2483
|
+
}
|
|
2484
|
+
|
|
2485
|
+
// 📑 dom
|
|
2486
|
+
|
|
2487
|
+
/**
|
|
2488
|
+
* El Modelo de Objetos del Documento (DOM) es una interfaz para
|
|
2489
|
+
* crear y editar páginas web con JavaScript.
|
|
71
2490
|
*/
|
|
72
|
-
var altoVentana: number;
|
|
73
2491
|
|
|
74
|
-
/**
|
|
75
|
-
*
|
|
2492
|
+
/** 📑
|
|
2493
|
+
* Crea un nuevo elemento HTML y lo añade a la página. `createEl` es
|
|
2494
|
+
* un alias.
|
|
2495
|
+
*
|
|
2496
|
+
* Modifica el [`style`](https://developer.mozilla.org/docs/Web/API/HTMLElement/style) CSS del elemento para cambiar su apariencia.
|
|
2497
|
+
*
|
|
2498
|
+
* Usa [`addEventListener`](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener) para responder a eventos como:
|
|
2499
|
+
*
|
|
2500
|
+
* - "click": cuando se hace clic en el elemento
|
|
2501
|
+
* - "mouseover": cuando el ratón pasa sobre el elemento
|
|
2502
|
+
* - "mouseout": cuando el ratón deja de pasar sobre el elemento
|
|
2503
|
+
* - "input": cuando el valor de un elemento de formulario cambia
|
|
2504
|
+
*
|
|
2505
|
+
* q5 añade alguna funcionalidad extra a los elementos que crea:
|
|
2506
|
+
*
|
|
2507
|
+
* - la función `position` facilita colocar el elemento
|
|
2508
|
+
* relativo al lienzo
|
|
2509
|
+
* - la función `size` establece el ancho y alto del elemento
|
|
2510
|
+
* - alternativamente, usa las propiedades `x`, `y`, `width`, y `height` del elemento
|
|
2511
|
+
* @param {string} etiqueta nombre de la etiqueta del elemento
|
|
2512
|
+
* @param {string} [contenido] contenido del elemento
|
|
2513
|
+
* @returns {HTMLElement} elemento
|
|
2514
|
+
* @example
|
|
2515
|
+
* crearLienzo(200);
|
|
2516
|
+
*
|
|
2517
|
+
* let el = crearElemento('div', '*');
|
|
2518
|
+
* el.position(50, 50);
|
|
2519
|
+
* el.size(100, 100);
|
|
2520
|
+
* el.style.fontSize = '136px';
|
|
2521
|
+
* el.style.textAlign = 'center';
|
|
2522
|
+
* el.style.backgroundColor = 'blue';
|
|
2523
|
+
* el.style.color = 'white';
|
|
76
2524
|
*/
|
|
77
|
-
|
|
2525
|
+
function crearElemento(etiqueta: string, contenido?: string): HTMLElement;
|
|
78
2526
|
|
|
79
|
-
/**
|
|
80
|
-
*
|
|
2527
|
+
/** 📑
|
|
2528
|
+
* Crea un elemento de enlace.
|
|
2529
|
+
* @param {string} href url
|
|
2530
|
+
* @param {string} [texto] contenido de texto
|
|
2531
|
+
* @param {boolean} [nuevaPestaña] si abrir el enlace en una nueva pestaña
|
|
2532
|
+
* @example
|
|
2533
|
+
* crearLienzo(200);
|
|
2534
|
+
*
|
|
2535
|
+
* let enlace = crearA('https://q5js.org', 'q5.js');
|
|
2536
|
+
* enlace.position(16, 42);
|
|
2537
|
+
* enlace.style.fontSize = '80px';
|
|
2538
|
+
*
|
|
2539
|
+
* enlace.addEventListener('mouseover', () => {
|
|
2540
|
+
* fondo('cyan');
|
|
2541
|
+
* });
|
|
81
2542
|
*/
|
|
82
|
-
function
|
|
2543
|
+
function crearA(href: string, texto?: string): HTMLAnchorElement;
|
|
83
2544
|
|
|
84
|
-
/**
|
|
85
|
-
*
|
|
86
|
-
* @param {
|
|
2545
|
+
/** 📑
|
|
2546
|
+
* Crea un elemento de botón.
|
|
2547
|
+
* @param {string} [contenido] contenido de texto
|
|
2548
|
+
* @example
|
|
2549
|
+
* crearLienzo(200, 100);
|
|
2550
|
+
*
|
|
2551
|
+
* let btn = crearBotón('Click me!');
|
|
2552
|
+
*
|
|
2553
|
+
* btn.addEventListener('click', () => {
|
|
2554
|
+
* fondo(aleatorio(100, 255));
|
|
2555
|
+
* });
|
|
87
2556
|
*/
|
|
88
|
-
function
|
|
2557
|
+
function crearBotón(): void;
|
|
89
2558
|
|
|
90
|
-
/**
|
|
91
|
-
*
|
|
2559
|
+
/** 📑
|
|
2560
|
+
* Crea un elemento de casilla de verificación (checkbox).
|
|
2561
|
+
*
|
|
2562
|
+
* Usa la propiedad `checked` para obtener o establecer el estado de la casilla.
|
|
2563
|
+
*
|
|
2564
|
+
* La propiedad `label` es el elemento de etiqueta de texto junto a la casilla.
|
|
2565
|
+
* @param {string} [etiqueta] etiqueta de texto colocada junto a la casilla
|
|
2566
|
+
* @param {boolean} [marcado] estado inicial
|
|
2567
|
+
* @example
|
|
2568
|
+
* crearLienzo(200, 100);
|
|
2569
|
+
*
|
|
2570
|
+
* let casilla = crearCasilla('Check me!');
|
|
2571
|
+
* casilla.label.style.color = 'lime';
|
|
2572
|
+
*
|
|
2573
|
+
* casilla.addEventListener('input', () => {
|
|
2574
|
+
* if (casilla.checked) fondo('lime');
|
|
2575
|
+
* else fondo('black');
|
|
2576
|
+
* });
|
|
92
2577
|
*/
|
|
93
|
-
function
|
|
2578
|
+
function crearCasilla(etiqueta?: string, marcado?: boolean): HTMLInputElement;
|
|
94
2579
|
|
|
95
|
-
/**
|
|
96
|
-
*
|
|
2580
|
+
/** 📑
|
|
2581
|
+
* Crea un elemento de entrada de color.
|
|
97
2582
|
*
|
|
98
|
-
*
|
|
99
|
-
* @param
|
|
100
|
-
* @
|
|
2583
|
+
* Usa la propiedad `value` para obtener o establecer el valor del color.
|
|
2584
|
+
* @param {string} [valor] valor de color inicial
|
|
2585
|
+
* @example
|
|
2586
|
+
* crearLienzo(200, 100);
|
|
2587
|
+
*
|
|
2588
|
+
* let selector = crearSelectorColor();
|
|
2589
|
+
* selector.value = '#fd7575';
|
|
2590
|
+
*
|
|
2591
|
+
* function dibujar() {
|
|
2592
|
+
* fondo(selector.value);
|
|
2593
|
+
* }
|
|
101
2594
|
*/
|
|
102
|
-
function
|
|
2595
|
+
function crearSelectorColor(valor?: string): HTMLInputElement;
|
|
103
2596
|
|
|
104
|
-
/**
|
|
105
|
-
*
|
|
2597
|
+
/** 📑
|
|
2598
|
+
* Crea un elemento de imagen.
|
|
2599
|
+
* @param {string} src url de la imagen
|
|
2600
|
+
* @example
|
|
2601
|
+
* crearLienzo(200, 100);
|
|
2602
|
+
*
|
|
2603
|
+
* let img = crearImg('/assets/p5play_logo.webp');
|
|
2604
|
+
* img.position(0, 0).size(100, 100);
|
|
106
2605
|
*/
|
|
107
|
-
function
|
|
2606
|
+
function crearImg(src: string): HTMLImageElement;
|
|
108
2607
|
|
|
109
|
-
/**
|
|
110
|
-
*
|
|
2608
|
+
/** 📑
|
|
2609
|
+
* Crea un elemento de entrada (input).
|
|
111
2610
|
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
2611
|
+
* Usa la propiedad `value` para obtener o establecer el valor de la entrada.
|
|
2612
|
+
*
|
|
2613
|
+
* Usa la propiedad `placeholder` para establecer el texto de etiqueta que aparece
|
|
2614
|
+
* dentro de la entrada cuando está vacía.
|
|
2615
|
+
*
|
|
2616
|
+
* Mira la [documentación de input](https://developer.mozilla.org/docs/Web/HTML/Element/input#input_types) de MDN para la lista completa de tipos de entrada.
|
|
2617
|
+
* @param {string} [valor] valor inicial
|
|
2618
|
+
* @param {string} [tipo] tipo de entrada de texto, puede ser 'text', 'password', 'email', 'number', 'range', 'search', 'tel', 'url'
|
|
2619
|
+
* @example
|
|
2620
|
+
* crearLienzo(200, 100);
|
|
2621
|
+
* tamañoTexto(64);
|
|
2622
|
+
*
|
|
2623
|
+
* let entrada = crearEntrada();
|
|
2624
|
+
* entrada.placeholder = 'Type here!';
|
|
2625
|
+
* entrada.size(200, 32);
|
|
2626
|
+
*
|
|
2627
|
+
* entrada.addEventListener('input', () => {
|
|
2628
|
+
* fondo('orange');
|
|
2629
|
+
* texto(entrada.value, 10, 70);
|
|
2630
|
+
* });
|
|
114
2631
|
*/
|
|
115
|
-
function
|
|
2632
|
+
function crearEntrada(valor?: string, tipo?: string): HTMLInputElement;
|
|
116
2633
|
|
|
117
|
-
/**
|
|
118
|
-
*
|
|
2634
|
+
/** 📑
|
|
2635
|
+
* Crea un elemento de párrafo.
|
|
2636
|
+
* @param {string} [contenido] contenido de texto
|
|
2637
|
+
* @example
|
|
2638
|
+
* crearLienzo(200, 50);
|
|
2639
|
+
* fondo('coral');
|
|
119
2640
|
*
|
|
120
|
-
*
|
|
2641
|
+
* let p = crearP('Hello, world!');
|
|
2642
|
+
* p.style.color = 'pink';
|
|
121
2643
|
*/
|
|
122
|
-
function
|
|
2644
|
+
function crearP(contenido?: string): HTMLParagraphElement;
|
|
123
2645
|
|
|
124
|
-
/**
|
|
125
|
-
*
|
|
2646
|
+
/** 📑
|
|
2647
|
+
* Crea un grupo de botones de radio.
|
|
126
2648
|
*
|
|
127
|
-
*
|
|
2649
|
+
* Usa la función `option(etiqueta, valor)` para añadir nuevos botones de radio
|
|
2650
|
+
* al grupo.
|
|
2651
|
+
*
|
|
2652
|
+
* Usa la propiedad `value` para obtener o establecer el valor del botón de radio seleccionado.
|
|
2653
|
+
* @param {string} [nombreGrupo]
|
|
2654
|
+
* @example
|
|
2655
|
+
* crearLienzo(200, 160);
|
|
2656
|
+
*
|
|
2657
|
+
* let radio = crearOpciónes();
|
|
2658
|
+
* radio.option('square', '1').option('circle', '2');
|
|
2659
|
+
*
|
|
2660
|
+
* function dibujar() {
|
|
2661
|
+
* fondo(200);
|
|
2662
|
+
* if (radio.value == '1') cuadrado(75, 25, 80);
|
|
2663
|
+
* if (radio.value == '2') círculo(100, 50, 80);
|
|
2664
|
+
* }
|
|
128
2665
|
*/
|
|
129
|
-
function
|
|
2666
|
+
function crearOpciónes(): void;
|
|
2667
|
+
|
|
2668
|
+
/** 📑
|
|
2669
|
+
* Crea un elemento de selección (select).
|
|
2670
|
+
*
|
|
2671
|
+
* Usa la función `option(etiqueta, valor)` para añadir nuevas opciones al
|
|
2672
|
+
* elemento de selección.
|
|
2673
|
+
*
|
|
2674
|
+
* Establece `multiple` a `true` para permitir seleccionar múltiples opciones.
|
|
2675
|
+
*
|
|
2676
|
+
* Usa la propiedad `value` para obtener o establecer el valor de la opción seleccionada.
|
|
2677
|
+
*
|
|
2678
|
+
* Usa la propiedad `selected` para obtener las etiquetas de las opciones
|
|
2679
|
+
* seleccionadas o establecer las opciones seleccionadas por etiqueta. Puede ser una sola
|
|
2680
|
+
* cadena o un array de cadenas.
|
|
2681
|
+
* @param {string} [placeholder] texto opcional que aparece antes de que se seleccione una opción
|
|
2682
|
+
* @example
|
|
2683
|
+
* crearLienzo(200, 100);
|
|
2684
|
+
*
|
|
2685
|
+
* let sel = crearSelección('Select a color');
|
|
2686
|
+
* sel.option('Red', '#f55').option('Green', '#5f5');
|
|
2687
|
+
*
|
|
2688
|
+
* sel.addEventListener('change', () => {
|
|
2689
|
+
* fondo(sel.value);
|
|
2690
|
+
* });
|
|
2691
|
+
*/
|
|
2692
|
+
function crearSelección(): void;
|
|
2693
|
+
|
|
2694
|
+
/** 📑
|
|
2695
|
+
* Crea un elemento deslizador (slider).
|
|
2696
|
+
*
|
|
2697
|
+
* Usa la propiedad `value` para obtener o establecer el valor del deslizador.
|
|
2698
|
+
*
|
|
2699
|
+
* Usa la función `val` para obtener el valor del deslizador como un número.
|
|
2700
|
+
* @param {number} min valor mínimo
|
|
2701
|
+
* @param {number} max valor máximo
|
|
2702
|
+
* @param {number} [valor] valor inicial
|
|
2703
|
+
* @param {number} [paso] tamaño del paso
|
|
2704
|
+
* @example
|
|
2705
|
+
* crearLienzo(200);
|
|
2706
|
+
*
|
|
2707
|
+
* let deslizador = crearDeslizador(0, 255);
|
|
2708
|
+
* deslizador.position(10, 10).size(180);
|
|
2709
|
+
*
|
|
2710
|
+
* function dibujar() {
|
|
2711
|
+
* fondo(deslizador.val());
|
|
2712
|
+
* }
|
|
2713
|
+
*/
|
|
2714
|
+
function crearDeslizador(min: number, max: number, valor?: number, paso?: number): HTMLInputElement;
|
|
2715
|
+
|
|
2716
|
+
/** 📑
|
|
2717
|
+
* Crea un elemento de video.
|
|
2718
|
+
*
|
|
2719
|
+
* Ten en cuenta que los videos deben estar silenciados para reproducirse automáticamente y las funciones `play` y
|
|
2720
|
+
* `pause` solo pueden ejecutarse después de una interacción del usuario.
|
|
2721
|
+
*
|
|
2722
|
+
* El elemento de video puede ocultarse y su contenido puede
|
|
2723
|
+
* mostrarse en el lienzo usando la función `imagen`.
|
|
2724
|
+
* @param {string} src url del video
|
|
2725
|
+
* @returns {HTMLVideoElement & PromiseLike<HTMLVideoElement>} un nuevo elemento de video
|
|
2726
|
+
* @example
|
|
2727
|
+
* crearLienzo(1);
|
|
2728
|
+
*
|
|
2729
|
+
* let vid = crearVideo('/assets/apollo4.mp4');
|
|
2730
|
+
* vid.size(200, 150);
|
|
2731
|
+
* vid.autoplay = vid.muted = vid.loop = true;
|
|
2732
|
+
* vid.controls = true;
|
|
2733
|
+
* @example
|
|
2734
|
+
* crearLienzo(200, 150);
|
|
2735
|
+
* let vid = crearVideo('/assets/apollo4.mp4');
|
|
2736
|
+
* vid.hide();
|
|
2737
|
+
*
|
|
2738
|
+
* function alPresionarRatón() {
|
|
2739
|
+
* vid.currentTime = 0;
|
|
2740
|
+
* vid.play();
|
|
2741
|
+
* }
|
|
2742
|
+
* function dibujar() {
|
|
2743
|
+
* imagen(vid, 0, 0, 200, 150);
|
|
2744
|
+
* filtro(HUE_ROTATE, 90);
|
|
2745
|
+
* }
|
|
2746
|
+
*/
|
|
2747
|
+
function crearVideo(src: string): HTMLVideoElement & PromiseLike<HTMLVideoElement>;
|
|
2748
|
+
|
|
2749
|
+
/** 📑
|
|
2750
|
+
* Crea una captura desde una cámara conectada, como una webcam.
|
|
2751
|
+
*
|
|
2752
|
+
* El elemento de video de captura puede ocultarse y su contenido puede
|
|
2753
|
+
* mostrarse en el lienzo usando la función `imagen`.
|
|
2754
|
+
*
|
|
2755
|
+
* Puede precargarse para asegurar que la captura esté lista para usar cuando tu
|
|
2756
|
+
* sketch comience.
|
|
2757
|
+
*
|
|
2758
|
+
* Solicita la resolución de video más alta de la cámara frontal del usuario
|
|
2759
|
+
* por defecto. El primer parámetro de esta función se puede usar para
|
|
2760
|
+
* especificar las restricciones para la captura. Mira [`getUserMedia`](https://developer.mozilla.org/docs/Web/API/MediaDevices/getUserMedia)
|
|
2761
|
+
* para más información.
|
|
2762
|
+
* @param {string} [tipo] tipo de captura, puede ser solo `VIDEO` o solo `AUDIO`, el defecto es usar ambos video y audio
|
|
2763
|
+
* @param {boolean} [volteado] si reflejar el video verticalmente, true por defecto
|
|
2764
|
+
* @returns {HTMLVideoElement & PromiseLike<HTMLVideoElement>} un nuevo elemento de video
|
|
2765
|
+
* @example
|
|
2766
|
+
* function alPresionarRatón() {
|
|
2767
|
+
* let cap = crearCaptura(VIDEO);
|
|
2768
|
+
* cap.size(200, 112.5);
|
|
2769
|
+
* canvas.remove();
|
|
2770
|
+
* }
|
|
2771
|
+
* @example
|
|
2772
|
+
* let cap;
|
|
2773
|
+
* function alPresionarRatón() {
|
|
2774
|
+
* cap = crearCaptura(VIDEO);
|
|
2775
|
+
* cap.hide();
|
|
2776
|
+
* }
|
|
2777
|
+
*
|
|
2778
|
+
* function dibujar() {
|
|
2779
|
+
* let y = frameCount % height;
|
|
2780
|
+
* imagen(cap, 0, y, 200, 200);
|
|
2781
|
+
* }
|
|
2782
|
+
* @example
|
|
2783
|
+
* function alPresionarRatón() {
|
|
2784
|
+
* let cap = crearCaptura({
|
|
2785
|
+
* video: { width: 640, height: 480 }
|
|
2786
|
+
* });
|
|
2787
|
+
* cap.size(200, 150);
|
|
2788
|
+
* canvas.remove();
|
|
2789
|
+
* }
|
|
2790
|
+
*/
|
|
2791
|
+
function crearCaptura(tipo?: string, volteado?: boolean): HTMLVideoElement & PromiseLike<HTMLVideoElement>;
|
|
2792
|
+
|
|
2793
|
+
/** 📑
|
|
2794
|
+
* Encuentra el primer elemento en el DOM que coincide con el [selector CSS](https://developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Basic_selectors) dado.
|
|
2795
|
+
* @param {string} selector
|
|
2796
|
+
* @returns {HTMLElement} elemento
|
|
2797
|
+
*/
|
|
2798
|
+
function encontrarElemento(selector: string): HTMLElement;
|
|
2799
|
+
|
|
2800
|
+
/** 📑
|
|
2801
|
+
* Encuentra todos los elementos en el DOM que coinciden con el [selector CSS](https://developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Basic_selectors) dado.
|
|
2802
|
+
* @param {string} selector
|
|
2803
|
+
* @returns {HTMLElement[]} elementos
|
|
2804
|
+
*/
|
|
2805
|
+
function encontrarElementos(selector: string): HTMLElement[];
|
|
2806
|
+
|
|
2807
|
+
// 🎞 record
|
|
2808
|
+
|
|
2809
|
+
/** 🎞
|
|
2810
|
+
* Crea una grabadora. ¡Simplemente presiona grabar para empezar a grabar!
|
|
2811
|
+
*
|
|
2812
|
+
* Las siguientes propiedades se pueden establecer a través de la UI de la grabadora o
|
|
2813
|
+
* programáticamente.
|
|
2814
|
+
*
|
|
2815
|
+
* - `format` se establece a "H.264" por defecto.
|
|
2816
|
+
* - `bitrate` es un número en megabits por segundo (mbps). Su valor por defecto
|
|
2817
|
+
* está determinado por la altura del lienzo. Aumentar la
|
|
2818
|
+
* tasa de bits aumentará la calidad y el tamaño del archivo de la grabación.
|
|
2819
|
+
* - `captureAudio` se establece a true por defecto. Establecer a false para deshabilitar
|
|
2820
|
+
* la grabación de audio.
|
|
2821
|
+
*
|
|
2822
|
+
* Ten en cuenta que las grabaciones se hacen a una tasa de fotogramas variable (VFR), lo que
|
|
2823
|
+
* hace que el video de salida sea incompatible con algún software de edición.
|
|
2824
|
+
* Para más información, mira la página wiki
|
|
2825
|
+
* ["Recording the Canvas"](https://github.com/q5js/q5.js/wiki/Recording-the-Canvas).
|
|
2826
|
+
* @returns {HTMLElement} una grabadora, elemento DOM de q5
|
|
2827
|
+
* @example
|
|
2828
|
+
* crearLienzo(200);
|
|
2829
|
+
*
|
|
2830
|
+
* let grab = crearGrabadora();
|
|
2831
|
+
* grab.bitrate = 10;
|
|
2832
|
+
*
|
|
2833
|
+
* function dibujar() {
|
|
2834
|
+
* círculo(ratónX, aleatorio(alto), 10);
|
|
2835
|
+
* }
|
|
2836
|
+
*/
|
|
2837
|
+
function crearGrabadora(): HTMLElement;
|
|
2838
|
+
|
|
2839
|
+
/** 🎞
|
|
2840
|
+
* Comienza a grabar el lienzo o reanuda la grabación si estaba pausada.
|
|
2841
|
+
*
|
|
2842
|
+
* Si no existe grabadora, se crea una pero no se muestra.
|
|
2843
|
+
*/
|
|
2844
|
+
function grabar(): void;
|
|
2845
|
+
|
|
2846
|
+
/** 🎞
|
|
2847
|
+
* Pausa la grabación del lienzo, si hay una en progreso.
|
|
2848
|
+
*/
|
|
2849
|
+
function pausarGrabación(): void;
|
|
2850
|
+
|
|
2851
|
+
/** 🎞
|
|
2852
|
+
* Descarta la grabación actual.
|
|
2853
|
+
*/
|
|
2854
|
+
function borrarGrabación(): void;
|
|
2855
|
+
|
|
2856
|
+
/** 🎞
|
|
2857
|
+
* Guarda la grabación actual como un archivo de video.
|
|
2858
|
+
* @param {string} nombreArchivo
|
|
2859
|
+
* @example
|
|
2860
|
+
* function dibujar() {
|
|
2861
|
+
* cuadrado(ratónX, aleatorio(200), 10);
|
|
2862
|
+
* }
|
|
2863
|
+
*
|
|
2864
|
+
* function alPresionarRatón() {
|
|
2865
|
+
* if (!grabando) grabar();
|
|
2866
|
+
* else guardarGrabación('squares');
|
|
2867
|
+
* }
|
|
2868
|
+
*/
|
|
2869
|
+
function guardarGrabación(): void;
|
|
2870
|
+
|
|
2871
|
+
/** 🎞
|
|
2872
|
+
* Verdadero si el lienzo está siendo grabado actualmente.
|
|
2873
|
+
*/
|
|
2874
|
+
var grabando: boolean;
|
|
2875
|
+
|
|
2876
|
+
// 🛠 utilities
|
|
2877
|
+
|
|
2878
|
+
/** 🛠
|
|
2879
|
+
* Carga un archivo o múltiples archivos.
|
|
2880
|
+
*
|
|
2881
|
+
* El tipo de archivo se determina por la extensión del archivo. q5 soporta cargar
|
|
2882
|
+
* archivos de texto, json, csv, fuente, audio, e imagen.
|
|
2883
|
+
*
|
|
2884
|
+
* Por defecto, los recursos se cargan en paralelo antes de que q5 ejecute `dibujar`. Usa `await` para esperar a que los recursos se carguen.
|
|
2885
|
+
* @param {...string} urls
|
|
2886
|
+
* @returns {Promise<any[]>} una promesa que se resuelve con objetos
|
|
2887
|
+
* @example
|
|
2888
|
+
* crearLienzo(200);
|
|
2889
|
+
* let logo = cargar('/q5js_logo.avif');
|
|
2890
|
+
*
|
|
2891
|
+
* function dibujar() {
|
|
2892
|
+
* imagen(logo, 0, 0, 200, 200);
|
|
2893
|
+
* }
|
|
2894
|
+
*/
|
|
2895
|
+
function cargar(...urls: string[]): PromiseLike<any[]>;
|
|
2896
|
+
|
|
2897
|
+
/** 🛠
|
|
2898
|
+
* Guarda datos en un archivo.
|
|
2899
|
+
*
|
|
2900
|
+
* Si no se especifican datos, se guardará el lienzo.
|
|
2901
|
+
*
|
|
2902
|
+
* Si no se proporcionan argumentos, el lienzo se guardará como
|
|
2903
|
+
* un archivo de imagen llamado "untitled.png".
|
|
2904
|
+
* @param {object} [datos] lienzo, imagen, u objeto JS
|
|
2905
|
+
* @param {string} [nombreArchivo] nombre de archivo para guardar como
|
|
2906
|
+
* @example
|
|
2907
|
+
* crearLienzo(200);
|
|
2908
|
+
* fondo(200);
|
|
2909
|
+
* círculo(100, 100, 50);
|
|
2910
|
+
*
|
|
2911
|
+
* function alPresionarRatón() {
|
|
2912
|
+
* guardar('circle.png');
|
|
2913
|
+
* }
|
|
2914
|
+
* @example
|
|
2915
|
+
* crearLienzo(200);
|
|
2916
|
+
*
|
|
2917
|
+
* tamañoTexto(180);
|
|
2918
|
+
* let rayo = crearImagenTexto('⚡️');
|
|
2919
|
+
* imagen(rayo, 16, -56);
|
|
2920
|
+
*
|
|
2921
|
+
* function alPresionarRatón() {
|
|
2922
|
+
* guardar(rayo, 'bolt.png');
|
|
2923
|
+
* }
|
|
2924
|
+
*/
|
|
2925
|
+
function guardar(datos?: object, nombreArchivo?: string): void;
|
|
2926
|
+
|
|
2927
|
+
/** 🛠
|
|
2928
|
+
* Carga un archivo de texto desde la url especificada.
|
|
2929
|
+
*
|
|
2930
|
+
* Se recomienda usar `await` para obtener el texto cargado como una cadena.
|
|
2931
|
+
* @param {string} url archivo de texto
|
|
2932
|
+
* @returns {object & PromiseLike<string>} un objeto conteniendo el texto cargado en la propiedad `obj.text` o usa `await` para obtener la cadena de texto directamente
|
|
2933
|
+
*/
|
|
2934
|
+
function cargarTexto(url: string): object & PromiseLike<string>;
|
|
2935
|
+
|
|
2936
|
+
/** 🛠
|
|
2937
|
+
* Carga un archivo JSON desde la url especificada.
|
|
2938
|
+
*
|
|
2939
|
+
* Se recomienda usar `await` para obtener el objeto o array JSON cargado.
|
|
2940
|
+
* @param {string} url archivo JSON
|
|
2941
|
+
* @returns {any & PromiseLike<any>} un objeto o array conteniendo el JSON cargado
|
|
2942
|
+
*/
|
|
2943
|
+
function cargarJSON(url: string): any & PromiseLike<any>;
|
|
2944
|
+
|
|
2945
|
+
/** 🛠
|
|
2946
|
+
* Carga un archivo CSV desde la url especificada.
|
|
2947
|
+
*
|
|
2948
|
+
* Se recomienda usar `await` para obtener el CSV cargado como un array de objetos.
|
|
2949
|
+
* @param {string} url archivo CSV
|
|
2950
|
+
* @returns {object[] & PromiseLike<object[]>} un array de objetos conteniendo el CSV cargado
|
|
2951
|
+
*/
|
|
2952
|
+
function cargarCSV(url: string): object[] & PromiseLike<object[]>;
|
|
2953
|
+
|
|
2954
|
+
/** 🛠
|
|
2955
|
+
* Carga un archivo xml desde la url especificada.
|
|
2956
|
+
*
|
|
2957
|
+
* Se recomienda usar `await` para obtener el Elemento XML cargado.
|
|
2958
|
+
* @param {string} url archivo xml
|
|
2959
|
+
* @returns {Element & PromiseLike<Element>} un objeto conteniendo el Elemento XML cargado en una propiedad llamada `obj.DOM` o usa await para obtener el Elemento XML directamente
|
|
2960
|
+
*/
|
|
2961
|
+
function cargarXML(url: string): object & PromiseLike<Element>;
|
|
2962
|
+
|
|
2963
|
+
/** 🛠
|
|
2964
|
+
* Espera a que cualquier recurso que comenzó a cargarse termine de cargarse. Por defecto q5 ejecuta esto antes de hacer bucle en dibujar (lo cual se llama precarga), pero se puede usar incluso después de que dibujar comience a hacer bucle.
|
|
2965
|
+
* @returns {PromiseLike<any[]>} una promesa que se resuelve con objetos cargados
|
|
2966
|
+
*/
|
|
2967
|
+
function cargarTodo(): PromiseLike<any[]>;
|
|
2968
|
+
|
|
2969
|
+
/** 🛠
|
|
2970
|
+
* Deshabilita la precarga automática de recursos antes de que dibujar comience a hacer bucle. Esto permite que dibujar comience inmediatamente, y los recursos se pueden cargar perezosamente o se puede usar `cargarTodo()` para esperar a que los recursos terminen de cargarse más tarde.
|
|
2971
|
+
*/
|
|
2972
|
+
function deshabilitarPrecarga(): void;
|
|
2973
|
+
|
|
2974
|
+
/** 🛠
|
|
2975
|
+
* nf es la abreviatura de formato de número. Formatea un número
|
|
2976
|
+
* a una cadena con un número especificado de dígitos.
|
|
2977
|
+
* @param {number} num número a formatear
|
|
2978
|
+
* @param {number} digitos número de dígitos a formatear
|
|
2979
|
+
* @returns {string} número formateado
|
|
2980
|
+
*/
|
|
2981
|
+
function nf(num: number, digitos: number): string;
|
|
2982
|
+
|
|
2983
|
+
/** 🛠
|
|
2984
|
+
* Baraja los elementos de un array.
|
|
2985
|
+
* @param {any[]} arr array a barajar
|
|
2986
|
+
* @param {boolean} [modificar] si modificar el array original, falso por defecto lo cual copia el array antes de barajar
|
|
2987
|
+
* @returns {any[]} array barajado
|
|
2988
|
+
*/
|
|
2989
|
+
function barajar(arr: any[]): any[];
|
|
2990
|
+
|
|
2991
|
+
/** 🛠
|
|
2992
|
+
* Almacena un ítem en localStorage.
|
|
2993
|
+
* @param {string} clave clave bajo la cual almacenar el ítem
|
|
2994
|
+
* @param {string} val valor a almacenar
|
|
2995
|
+
*/
|
|
2996
|
+
function guardarItem(clave: string, val: string): void;
|
|
2997
|
+
|
|
2998
|
+
/** 🛠
|
|
2999
|
+
* Recupera un ítem de localStorage.
|
|
3000
|
+
* @param {string} clave clave del ítem a recuperar
|
|
3001
|
+
* @returns {string} valor del ítem recuperado
|
|
3002
|
+
*/
|
|
3003
|
+
function obtenerItem(clave: string): string;
|
|
3004
|
+
|
|
3005
|
+
/** 🛠
|
|
3006
|
+
* Elimina un ítem de localStorage.
|
|
3007
|
+
* @param {string} clave clave del ítem a eliminar
|
|
3008
|
+
*/
|
|
3009
|
+
function eliminarItem(clave: string): void;
|
|
3010
|
+
|
|
3011
|
+
/** 🛠
|
|
3012
|
+
* Limpia todos los ítems de localStorage.
|
|
3013
|
+
*/
|
|
3014
|
+
function limpiarAlmacenamiento(): void;
|
|
3015
|
+
|
|
3016
|
+
/** 🛠
|
|
3017
|
+
* Devuelve el año actual.
|
|
3018
|
+
* @returns {number} año actual
|
|
3019
|
+
*/
|
|
3020
|
+
function año(): void;
|
|
3021
|
+
|
|
3022
|
+
/** 🛠
|
|
3023
|
+
* Devuelve el día actual del mes.
|
|
3024
|
+
* @returns {number} día actual
|
|
3025
|
+
*/
|
|
3026
|
+
function día(): void;
|
|
3027
|
+
|
|
3028
|
+
/** 🛠
|
|
3029
|
+
* Devuelve la hora actual.
|
|
3030
|
+
* @returns {number} hora actual
|
|
3031
|
+
*/
|
|
3032
|
+
function hora(): number;
|
|
3033
|
+
|
|
3034
|
+
/** 🛠
|
|
3035
|
+
* Devuelve el minuto actual.
|
|
3036
|
+
* @returns {number} minuto actual
|
|
3037
|
+
*/
|
|
3038
|
+
function minuto(): number;
|
|
3039
|
+
|
|
3040
|
+
/** 🛠
|
|
3041
|
+
* Devuelve el segundo actual.
|
|
3042
|
+
* @returns {number} segundo actual
|
|
3043
|
+
*/
|
|
3044
|
+
function segundo(): number;
|
|
3045
|
+
|
|
3046
|
+
// ↗ vector
|
|
3047
|
+
|
|
3048
|
+
/** ↗
|
|
3049
|
+
* Crea un nuevo objeto Vector.
|
|
3050
|
+
* @param {number} [x] componente x del vector
|
|
3051
|
+
* @param {number} [y] componente y del vector
|
|
3052
|
+
* @param {number} [z] componente z del vector
|
|
3053
|
+
* @param {number} [w] componente w del vector
|
|
3054
|
+
* @returns {Vector} nuevo objeto Vector
|
|
3055
|
+
*/
|
|
3056
|
+
function crearVector(): void;
|
|
3057
|
+
|
|
3058
|
+
/** ↗
|
|
3059
|
+
* Una clase para describir un vector bidimensional o tridimensional, específicamente un vector euclidiano (también conocido como geométrico). Un vector es una entidad que tiene tanto magnitud como dirección. El tipo de datos almacena los componentes del vector (x, y para 2D, y z para 3D). La magnitud y dirección se pueden acceder a través de los métodos `mag()` y `heading()`.
|
|
3060
|
+
* @param {number} [x] componente x del vector
|
|
3061
|
+
* @param {number} [y] componente y del vector
|
|
3062
|
+
* @param {number} [z] componente z del vector
|
|
3063
|
+
* @param {number} [w] componente w del vector
|
|
3064
|
+
* @returns {Vector} este vector
|
|
3065
|
+
* @returns {Vector} copia del vector
|
|
3066
|
+
* @param {number | Vector} x componente x del vector o Vector a sumar
|
|
3067
|
+
* @param {number} [y] componente y del vector
|
|
3068
|
+
* @param {number} [z] componente z del vector
|
|
3069
|
+
* @returns {Vector} este vector
|
|
3070
|
+
* @param {number | Vector} x componente x del vector o Vector a restar
|
|
3071
|
+
* @param {number} [y] componente y del vector
|
|
3072
|
+
* @param {number} [z] componente z del vector
|
|
3073
|
+
* @returns {Vector} este vector
|
|
3074
|
+
* @param {number} n escalar por el cual multiplicar
|
|
3075
|
+
* @returns {Vector} este vector
|
|
3076
|
+
* @param {number} n escalar por el cual dividir
|
|
3077
|
+
* @returns {Vector} este vector
|
|
3078
|
+
* @returns {number} magnitud del vector
|
|
3079
|
+
* @returns {number} magnitud del vector al cuadrado
|
|
3080
|
+
* @param {Vector} v vector con el cual hacer producto punto
|
|
3081
|
+
* @returns {number} producto punto
|
|
3082
|
+
* @param {Vector} v vector con el cual hacer producto cruz
|
|
3083
|
+
* @returns {Vector} producto cruz
|
|
3084
|
+
* @param {Vector} v vector al cual calcular distancia
|
|
3085
|
+
* @returns {number} distancia
|
|
3086
|
+
* @returns {Vector} este vector
|
|
3087
|
+
* @param {number} max magnitud máxima
|
|
3088
|
+
* @returns {Vector} este vector
|
|
3089
|
+
* @param {number} len nueva longitud para este vector
|
|
3090
|
+
* @returns {Vector} este vector
|
|
3091
|
+
* @returns {number} el ángulo de rotación
|
|
3092
|
+
* @param {number} ángulo ángulo de rotación
|
|
3093
|
+
* @returns {Vector} este vector
|
|
3094
|
+
* @param {Vector} v el vector x, y, z
|
|
3095
|
+
* @returns {number} el ángulo entre
|
|
3096
|
+
* @param {Vector} v el vector x, y, z
|
|
3097
|
+
* @param {number} amt la cantidad de interpolación; 0.0 es el vector antiguo, 1.0 es el nuevo vector, 0.5 está a mitad de camino
|
|
3098
|
+
* @returns {Vector} este vector
|
|
3099
|
+
* @param {Vector} superficieNormal el vector normal a la superficie
|
|
3100
|
+
* @returns {Vector} este vector
|
|
3101
|
+
* @returns {number[]} array de flotantes
|
|
3102
|
+
* @param {Vector} v el vector a comparar
|
|
3103
|
+
* @returns {boolean} verdadero si los vectores son iguales
|
|
3104
|
+
* @param {number} ángulo el ángulo deseado
|
|
3105
|
+
* @param {number} [longitud] longitud del nuevo vector (por defecto a 1)
|
|
3106
|
+
* @returns {Vector} nuevo objeto Vector
|
|
3107
|
+
* @returns {Vector} nuevo objeto Vector
|
|
3108
|
+
* @returns {Vector} nuevo objeto Vector
|
|
3109
|
+
*/
|
|
3110
|
+
class Vector {
|
|
3111
|
+
|
|
3112
|
+
// 🖌 shaping
|
|
3113
|
+
|
|
3114
|
+
/** 🖌
|
|
3115
|
+
* Dibuja un arco, que es una sección de una elipse.
|
|
3116
|
+
*
|
|
3117
|
+
* `modoEliptico` afecta cómo se dibuja el arco.
|
|
3118
|
+
*
|
|
3119
|
+
* q5 WebGPU solo soporta el modo por defecto `PIE_OPEN`.
|
|
3120
|
+
* @param {number} x coordenada-x
|
|
3121
|
+
* @param {number} y coordenada-y
|
|
3122
|
+
* @param {number} w ancho de la elipse
|
|
3123
|
+
* @param {number} h alto de la elipse
|
|
3124
|
+
* @param {number} inicio ángulo para empezar el arco
|
|
3125
|
+
* @param {number} fin ángulo para terminar el arco
|
|
3126
|
+
* @param {number} [modo] configuración de estilo de forma y trazo, por defecto es `PIE_OPEN` para una forma de pastel con un trazo no cerrado, puede ser `PIE`, `CHORD`, o `CHORD_OPEN`
|
|
3127
|
+
* @example
|
|
3128
|
+
* crearLienzo(200);
|
|
3129
|
+
* fondo(200);
|
|
3130
|
+
*
|
|
3131
|
+
* arco(40, 40, 40, 40, 0.8, -0.8);
|
|
3132
|
+
* arco(80, 80, 40, 40, 0.8, -0.8, PIE);
|
|
3133
|
+
* arco(120, 120, 40, 40, 0.8, -0.8, CHORD_OPEN);
|
|
3134
|
+
* arco(160, 160, 40, 40, 0.8, -0.8, CHORD);
|
|
3135
|
+
*/
|
|
3136
|
+
function arco(x: number, y: number, w: number, h: number, inicio: number, fin: number, modo?: number): void;
|
|
3137
|
+
|
|
3138
|
+
/** 🖌
|
|
3139
|
+
* Dibuja una curva.
|
|
3140
|
+
*/
|
|
3141
|
+
function curva(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): void;
|
|
3142
|
+
|
|
3143
|
+
/** 🖌
|
|
3144
|
+
* Establece la cantidad de segmentos de línea recta usados para hacer una curva.
|
|
3145
|
+
*
|
|
3146
|
+
* Solo tiene efecto en q5 WebGPU.
|
|
3147
|
+
* @param {number} val nivel de detalle de la curva, por defecto es 20
|
|
3148
|
+
*/
|
|
3149
|
+
function detalleCurva(val: number): void;
|
|
3150
|
+
|
|
3151
|
+
/** 🖌
|
|
3152
|
+
* Comienza a almacenar vértices para una forma convexa.
|
|
3153
|
+
*/
|
|
3154
|
+
function empezarForma(): void;
|
|
3155
|
+
|
|
3156
|
+
/** 🖌
|
|
3157
|
+
* Termina de almacenar vértices para una forma convexa.
|
|
3158
|
+
*/
|
|
3159
|
+
function terminarForma(): void;
|
|
3160
|
+
|
|
3161
|
+
/** 🖌
|
|
3162
|
+
* Comienza a almacenar vértices para un contorno.
|
|
3163
|
+
*
|
|
3164
|
+
* No disponible en q5 WebGPU.
|
|
3165
|
+
*/
|
|
3166
|
+
function empezarContorno(): void;
|
|
3167
|
+
|
|
3168
|
+
/** 🖌
|
|
3169
|
+
* Termina de almacenar vértices para un contorno.
|
|
3170
|
+
*
|
|
3171
|
+
* No disponible en q5 WebGPU.
|
|
3172
|
+
*/
|
|
3173
|
+
function terminarContorno(): void;
|
|
3174
|
+
|
|
3175
|
+
/** 🖌
|
|
3176
|
+
* Especifica un vértice en una forma.
|
|
3177
|
+
* @param {number} x coordenada-x
|
|
3178
|
+
* @param {number} y coordenada-y
|
|
3179
|
+
*/
|
|
3180
|
+
function vértice(): void;
|
|
3181
|
+
|
|
3182
|
+
/** 🖌
|
|
3183
|
+
* Especifica un vértice Bezier en una forma.
|
|
3184
|
+
* @param {number} cp1x coordenada-x del primer punto de control
|
|
3185
|
+
* @param {number} cp1y coordenada-y del primer punto de control
|
|
3186
|
+
* @param {number} cp2x coordenada-x del segundo punto de control
|
|
3187
|
+
* @param {number} cp2y coordenada-y del segundo punto de control
|
|
3188
|
+
* @param {number} x coordenada-x del punto de anclaje
|
|
3189
|
+
* @param {number} y coordenada-y del punto de anclaje
|
|
3190
|
+
*/
|
|
3191
|
+
function vérticeBezier(): void;
|
|
3192
|
+
|
|
3193
|
+
/** 🖌
|
|
3194
|
+
* Especifica un vértice Bezier cuadrático en una forma.
|
|
3195
|
+
* @param {number} cp1x coordenada-x del punto de control
|
|
3196
|
+
* @param {number} cp1y coordenada-y del punto de control
|
|
3197
|
+
* @param {number} x coordenada-x del punto de anclaje
|
|
3198
|
+
* @param {number} y coordenada-y del punto de anclaje
|
|
3199
|
+
*/
|
|
3200
|
+
function vérticeCuadrático(): void;
|
|
3201
|
+
|
|
3202
|
+
/** 🖌
|
|
3203
|
+
* Dibuja una curva Bezier.
|
|
3204
|
+
* @param {number} x1 coordenada-x del primer punto de anclaje
|
|
3205
|
+
* @param {number} y1 coordenada-y del primer punto de anclaje
|
|
3206
|
+
* @param {number} x2 coordenada-x del primer punto de control
|
|
3207
|
+
* @param {number} y2 coordenada-y del primer punto de control
|
|
3208
|
+
* @param {number} x3 coordenada-x del segundo punto de control
|
|
3209
|
+
* @param {number} y3 coordenada-y del segundo punto de control
|
|
3210
|
+
* @param {number} x4 coordenada-x del segundo punto de anclaje
|
|
3211
|
+
* @param {number} y4 coordenada-y del segundo punto de anclaje
|
|
3212
|
+
*/
|
|
3213
|
+
function bezier(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): void;
|
|
3214
|
+
|
|
3215
|
+
/** 🖌
|
|
3216
|
+
* Dibuja un triángulo.
|
|
3217
|
+
* @param {number} x1 coordenada-x del primer vértice
|
|
3218
|
+
* @param {number} y1 coordenada-y del primer vértice
|
|
3219
|
+
* @param {number} x2 coordenada-x del segundo vértice
|
|
3220
|
+
* @param {number} y2 coordenada-y del segundo vértice
|
|
3221
|
+
* @param {number} x3 coordenada-x del tercer vértice
|
|
3222
|
+
* @param {number} y3 coordenada-y del tercer vértice
|
|
3223
|
+
*/
|
|
3224
|
+
function triángulo(): void;
|
|
3225
|
+
|
|
3226
|
+
/** 🖌
|
|
3227
|
+
* Dibuja un cuadrilátero.
|
|
3228
|
+
* @param {number} x1 coordenada-x del primer vértice
|
|
3229
|
+
* @param {number} y1 coordenada-y del primer vértice
|
|
3230
|
+
* @param {number} x2 coordenada-x del segundo vértice
|
|
3231
|
+
* @param {number} y2 coordenada-y del segundo vértice
|
|
3232
|
+
* @param {number} x3 coordenada-x del tercer vértice
|
|
3233
|
+
* @param {number} y3 coordenada-y del tercer vértice
|
|
3234
|
+
* @param {number} x4 coordenada-x del cuarto vértice
|
|
3235
|
+
* @param {number} y4 coordenada-y del cuarto vértice
|
|
3236
|
+
*/
|
|
3237
|
+
function quad(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): void;
|
|
3238
|
+
|
|
3239
|
+
// ⚙ advanced
|
|
3240
|
+
|
|
3241
|
+
class Q5 {
|
|
3242
|
+
|
|
3243
|
+
/** ⚙
|
|
3244
|
+
* Funcion constructora. Crea una instancia de Q5.
|
|
3245
|
+
* @param {string | Function} [ambito]
|
|
3246
|
+
* @param {HTMLElement} [contenedor] elemento HTML dentro del cual se colocará el lienzo
|
|
3247
|
+
* @example
|
|
3248
|
+
* let q = new Q5('namespace');
|
|
3249
|
+
* q.crearLienzo(200, 100);
|
|
3250
|
+
* q.círculo(100, 50, 20);
|
|
3251
|
+
*/
|
|
3252
|
+
constructor(scope?: string | Function, parent?: HTMLElement);
|
|
3253
|
+
static deshabilitarErroresAmigables: boolean;
|
|
3254
|
+
|
|
3255
|
+
static toleranteErrores: boolean;
|
|
3256
|
+
|
|
3257
|
+
static soportaHDR: boolean;
|
|
3258
|
+
|
|
3259
|
+
static opcionesLienzo: object;
|
|
3260
|
+
|
|
3261
|
+
static MAX_RECTS: number;
|
|
3262
|
+
|
|
3263
|
+
static MAX_ELIPSES: number;
|
|
3264
|
+
|
|
3265
|
+
static MAX_TRANSFORMACIONES: number;
|
|
3266
|
+
|
|
3267
|
+
static MAX_CARACTERES: number;
|
|
3268
|
+
|
|
3269
|
+
static MAX_TEXTOS: number;
|
|
3270
|
+
|
|
3271
|
+
static WebGPU(): Q5;
|
|
3272
|
+
|
|
3273
|
+
static agregarHook(cicloVida: string, fn: Function): void;
|
|
3274
|
+
|
|
3275
|
+
static registrarAddon(addon: Function): void;
|
|
3276
|
+
|
|
3277
|
+
static modulos: object;
|
|
3278
|
+
|
|
3279
|
+
dibujar(): void;
|
|
3280
|
+
|
|
3281
|
+
postProcesar(): void;
|
|
3282
|
+
|
|
3283
|
+
actualizar(): void; //-
|
|
3284
|
+
|
|
3285
|
+
dibujarFotograma(): void; //-
|
|
3286
|
+
|
|
3287
|
+
static Imagen: {
|
|
3288
|
+
new (w: number, h: number, opt?: any): Q5.Imagen;
|
|
3289
|
+
};
|
|
3290
|
+
|
|
3291
|
+
}
|
|
3292
|
+
|
|
3293
|
+
namespace Q5 {
|
|
3294
|
+
interface Imagen {
|
|
3295
|
+
ancho: number;
|
|
3296
|
+
alto: number;
|
|
3297
|
+
}
|
|
3298
|
+
}
|
|
3299
|
+
|
|
3300
|
+
const q5: typeof Q5;
|
|
130
3301
|
|
|
131
3302
|
}
|
|
132
3303
|
|