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.
@@ -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: object): Promise<HTMLCanvasElement>;
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(...mensaje: any[]): void;
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
- * Al igual que la función [`color`](https://q5js.org/learn/#color),
56
- * esta función puede aceptar colores en una amplia gama de formatos:
57
- * cadena de color CSS, valor de escala de grises y valores de componentes de color.
58
- * @param {Color | Q5.Image} relleno un color o una imagen para dibujar
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 fondo(relleno: Color | Q5.Image): void;
2405
+ function cargarAudio(url: string): HTMLAudioElement & PromiseLike<HTMLAudioElement>;
61
2406
 
62
- // 💻 display
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
- * El ancho de la ventana (cantidad de píxeles). Atajo para `window.innerWidth`.
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
- var anchoVentana: number;
2417
+ function iniciarAudioUsuario(): Promise<void>;
68
2418
 
69
- /** 💻
70
- * El alto de la ventana (cantidad de píxeles). Atajo para `window.innerHeight`.
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
- * Número del cuadro actual, es decir, la cantidad de cuadros que se han dibujado desde que se inició el sketch.
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
- var cuadroActual: number;
2525
+ function crearElemento(etiqueta: string, contenido?: string): HTMLElement;
78
2526
 
79
- /** 💻
80
- * Detiene el bucle de dibujo.
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 pausar(): void;
2543
+ function crearA(href: string, texto?: string): HTMLAnchorElement;
83
2544
 
84
- /** 💻
85
- * Dibuja el lienzo `n` veces. Si no recibe parametro, se dibuja una sola vez. Útil para controlar animaciones con el bucle pausado.
86
- * @param {number} [n] cantidad de veces que se volverá a dibujar el lienzo, por defecto es 1
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 redibujar(n?: number): void;
2557
+ function crearBotón(): void;
89
2558
 
90
- /** 💻
91
- * Vuelve a activar el bucle de dibujo en caso de que estuviera pausado.
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 reanudar(): void;
2578
+ function crearCasilla(etiqueta?: string, marcado?: boolean): HTMLInputElement;
94
2579
 
95
- /** 💻
96
- * 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).
2580
+ /** 📑
2581
+ * Crea un elemento de entrada de color.
97
2582
  *
98
- * 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).
99
- * @param `hz` {number} [frecuencia] cantidad ideal de cuadros a dibujar en un segundo, por defecto es 60
100
- * @returns {number} frecuencia real del bucle en el último segundo
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 frecuenciaRefresco(hz: number): void | number;
2595
+ function crearSelectorColor(valor?: string): HTMLInputElement;
103
2596
 
104
- /** 💻
105
- * Retorna la cantidad ideal de cuadros que se intentan dibujar por segundo.
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 frecuenciaIdeal(): void;
2606
+ function crearImg(src: string): HTMLImageElement;
108
2607
 
109
- /** 💻
110
- * Retorna la cantidad maxima de cuadros que se podrían estar dibujando en cada segundo.
2608
+ /** 📑
2609
+ * Crea un elemento de entrada (input).
111
2610
  *
112
- * Es un valor teórico que depende del estado del dispositivo. Para un mejor análisis del rendimiento usar las herramientas del navegador (DevTools).
113
- * @returns {number} cantidad máxima teorica de cuadros por segundo
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 frecuenciaMaxima(): void;
2632
+ function crearEntrada(valor?: string, tipo?: string): HTMLInputElement;
116
2633
 
117
- /** 💻
118
- * 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.
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
- * Ú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.
2641
+ * let p = crearP('Hello, world!');
2642
+ * p.style.color = 'pink';
121
2643
  */
122
- function retocarDibujo(): void;
2644
+ function crearP(contenido?: string): HTMLParagraphElement;
123
2645
 
124
- /** 💻
125
- * 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.
2646
+ /** 📑
2647
+ * Crea un grupo de botones de radio.
126
2648
  *
127
- * Ú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.
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 ultimoTiempo(): void;
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