q5 3.9.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/defs/q5-es.d.ts DELETED
@@ -1,4345 +0,0 @@
1
- declare global {
2
-
3
- // ⭐ núcleo
4
-
5
- /**
6
- * Bienvenido al contenido de q5! 🤩
7
- *
8
- * ¿Primera vez programando? Revisa la [guía para principiantes de q5](https://github.com/q5js/q5.js/wiki/q5-Beginner's-Brief).
9
- *
10
- * En estas páginas de "Aprender" puedes experimentar editando los mini ejemplos. ¡Diviértete! 😎
11
- */
12
-
13
- /** ⭐
14
- * Crea un elemento de lienzo, una sección de la pantalla donde tu programa
15
- * puede dibujar.
16
- *
17
- * ¡Ejecuta esta función para empezar a usar q5!
18
- *
19
- * Ten en cuenta que en este ejemplo, el círculo se encuentra en la posición [0, 0], el origen del lienzo.
20
- * @param {number} [ancho] ancho del lienzo en píxeles
21
- * @param {number} [alto] alto del lienzo en píxeles
22
- * @param {object} [opciones] opciones para el contexto 2d
23
- * @return {Promise<HTMLCanvasElement>} una promesa que se resuelve con el elemento canvas creado
24
- * @example
25
- * // WebGPU
26
- * await Lienzo(200, 100);
27
- * fondo('silver');
28
- * círculo(0, 0, 80);
29
- */
30
- function Lienzo(ancho?: number, alto?: number, opciones?: CanvasRenderingContext2DSettings): Promise<HTMLCanvasElement>;
31
-
32
- /** ⭐
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
- * q5.dibujar = function () {
36
- * fondo('silver');
37
- * círculo(ratónX, ratónY, 80);
38
- * };
39
- */
40
- function dibujar(): void;
41
-
42
- /** ⭐
43
- * Imprime un mensaje en la consola de JavaScript. Atajo para `console.log()`.
44
- *
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".
46
- * @param {any} mensaje a imprimir
47
- * @example
48
- * q5.dibujar = function () {
49
- * círculo(ratónX, ratónY, 80);
50
- * log('El ratón está en:', ratónX, ratónY);
51
- * };
52
- */
53
- function log(mensaje: any): void;
54
-
55
- // 🧑‍🎨 formas
56
-
57
- /** 🧑‍🎨
58
- * Dibuja un círculo en la posición (x, y) con el diámetro especificado.
59
- * @param {number} x posición x del centro del círculo
60
- * @param {number} y posición y del centro del círculo
61
- * @param {number} diámetro del círculo
62
- * @example
63
- * await Lienzo(200, 100);
64
- * círculo(0, 0, 80);
65
- */
66
- function círculo(x: number, y: number, diámetro: number): void;
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
- * await Lienzo(200, 100);
76
- * elipse(0, 0, 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
- * await Lienzo(200);
89
- * fondo(0.8);
90
- *
91
- * rect(-70, -80, 40, 60);
92
- * rect(-20, -30, 40, 60, 10);
93
- * rect(30, 20, 40, 60, 30);
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
- * await Lienzo(200);
105
- * fondo(0.8);
106
- *
107
- * cuadrado(-70, -70, 40);
108
- * cuadrado(-20, -20, 40, 10);
109
- * cuadrado(30, 30, 40, 30);
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
- * await Lienzo(200, 100);
119
- * trazo('white');
120
- * punto(-25, 0);
121
- *
122
- * grosorTrazo(10);
123
- * punto(25, 0);
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
- * await Lienzo(200, 100);
135
- * trazo('lime');
136
- * línea(-80, -30, 80, 30);
137
- */
138
- function línea(x1: number, y1: number, x2: number, y2: number): 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
- * await Lienzo(200, 100);
149
- * fondo(0.8);
150
- * grosorTrazo(5);
151
- * cápsula(-60, -10, 60, 10, 10);
152
- * @example
153
- * q5.dibujar = function () {
154
- * fondo(0.8);
155
- * relleno('cyan');
156
- * grosorTrazo(10);
157
- * cápsula(0, 0, ratónX, ratónY, 20);
158
- * };
159
- */
160
- function cápsula(x1: number, y1: number, x2: number, y2: number, r: number): 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
- * await Lienzo(200, 100);
170
- * fondo(0.8);
171
- * modoRect(ESQUINA);
172
- *
173
- * // ( x, y, w, h)
174
- * rect(-50, -25, 100, 50);
175
- * @example
176
- * await Lienzo(200, 100);
177
- * fondo(0.8);
178
- * modoRect(CENTRO);
179
- *
180
- * // ( cX, cY, w, h)
181
- * rect(0, 0, 100, 50);
182
- * @example
183
- * await Lienzo(200, 100);
184
- * fondo(0.8);
185
- * modoRect(RADIO);
186
- *
187
- * // ( cX, cY, rX, rY)
188
- * rect(0, 0, 50, 25);
189
- * @example
190
- * await Lienzo(200, 100);
191
- * fondo(0.8);
192
- * modoRect(ESQUINAS);
193
- *
194
- * // ( x1, y1, x2, y2)
195
- * rect(-50, -25, 50, 25);
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
- * await Lienzo(200, 100);
207
- * fondo(0.8);
208
- * modoEliptico(CENTRO);
209
- *
210
- * // ( x, y, w, h)
211
- * elipse(0, 0, 100, 50);
212
- * @example
213
- * await Lienzo(200, 100);
214
- * fondo(0.8);
215
- * modoEliptico(RADIO);
216
- *
217
- * // ( x, y, rX, rY)
218
- * elipse(0, 0, 50, 25);
219
- * @example
220
- * await Lienzo(200, 100);
221
- * fondo(0.8);
222
- * modoEliptico(ESQUINA);
223
- *
224
- * // (lX, tY, w, h)
225
- * elipse(-50, -25, 100, 50);
226
- * @example
227
- * await Lienzo(200, 100);
228
- * fondo(0.8);
229
- * modoEliptico(ESQUINAS);
230
- *
231
- * // ( x1, y1, x2, y2)
232
- * elipse(-50, -25, 50, 25);
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
- // 🌆 imagen
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
- * await Lienzo(200);
261
- *
262
- * let logo = cargarImagen('/q5js_logo.avif');
263
- *
264
- * q5.dibujar = function () {
265
- * fondo(logo);
266
- * };
267
- * @example
268
- * await Lienzo(200);
269
- *
270
- * let logo = await cargarImagen('/q5js_logo.avif');
271
- * fondo(logo);
272
- */
273
- function cargarImagen(url: string): Q5.Imagen & PromiseLike<Q5.Imagen>;
274
-
275
- /** 🌆
276
- * Dibuja una imagen o fotograma de video en el lienzo.
277
- * @param {Q5.Image | HTMLVideoElement} img imagen o video a dibujar
278
- * @param {number} dx posición x donde dibujar la imagen
279
- * @param {number} dy posición y donde dibujar la imagen
280
- * @param {number} [dw] ancho de la imagen de destino
281
- * @param {number} [dh] alto de la imagen de destino
282
- * @param {number} [sx] posición x en la fuente para empezar a recortar una subsección
283
- * @param {number} [sy] posición y en la fuente para empezar a recortar una subsección
284
- * @param {number} [sw] ancho de la subsección de la imagen fuente
285
- * @param {number} [sh] alto de la subsección de la imagen fuente
286
- * @example
287
- * await Lienzo(200);
288
- *
289
- * let logo = cargarImagen('/q5js_logo.avif');
290
- *
291
- * q5.dibujar = function () {
292
- * imagen(logo, -100, -100, 200, 200);
293
- * };
294
- * @example
295
- * await Lienzo(200);
296
- *
297
- * let logo = cargarImagen('/q5js_logo.avif');
298
- *
299
- * q5.dibujar = function () {
300
- * imagen(logo, -100, -100, 200, 200, 256, 256, 512, 512);
301
- * };
302
- */
303
- function imagen(): void;
304
-
305
- /** 🌆
306
- * Establecer a `CORNER` (por defecto), `CORNERS`, o `CENTER`.
307
- *
308
- * Cambia cómo se interpretan las entradas a `imagen`.
309
- * @param {string} modo
310
- * @example
311
- * await Lienzo(200);
312
- * let logo = cargarImagen('/q5js_logo.avif');
313
- *
314
- * q5.dibujar = function () {
315
- * modoImagen(CORNER);
316
- *
317
- * // ( img, x, y, w, h)
318
- * imagen(logo, -50, -50, 100, 100);
319
- * };
320
- * @example
321
- * await Lienzo(200);
322
- * let logo = cargarImagen('/q5js_logo.avif');
323
- *
324
- * q5.dibujar = function () {
325
- * modoImagen(CENTER);
326
- *
327
- * // ( img, cX, cY, w, h)
328
- * imagen(logo, 0, 0, 100, 100);
329
- * };
330
- * @example
331
- * await Lienzo(200);
332
- * let logo = cargarImagen('/q5js_logo.avif');
333
- *
334
- * q5.dibujar = function () {
335
- * modoImagen(CORNERS);
336
- *
337
- * // ( img, x1, y1, x2, y2)
338
- * imagen(logo, -50, -50, 50, 50);
339
- * };
340
- */
341
- function modoImagen(modo: string): void;
342
-
343
- /** 🌆
344
- * Establece la escala de imagen por defecto, que se aplica a las imágenes cuando
345
- * se dibujan sin un ancho o alto especificado.
346
- *
347
- * Por defecto es 0.5 para que las imágenes aparezcan en su tamaño real
348
- * cuando la densidad de píxeles es 2. Las imágenes se dibujarán a un tamaño
349
- * por defecto consistente relativo al lienzo independientemente de la densidad de píxeles.
350
- *
351
- * Esta función debe llamarse antes de que se carguen las imágenes para
352
- * tener efecto.
353
- * @param {number} escala
354
- * @returns {number} escala de imagen por defecto
355
- */
356
- function escalaImagenPorDefecto(escala: number): number;
357
-
358
- /** 🌆
359
- * Redimensiona la imagen.
360
- * @param {number} w nuevo ancho
361
- * @param {number} h nuevo alto
362
- * @example
363
- * await Lienzo(200);
364
- *
365
- * let logo = await cargar('/q5js_logo.avif');
366
- *
367
- * logo.redimensionar(128, 128);
368
- * imagen(logo, -100, -100, 200, 200);
369
- */
370
- function redimensionar(w: number, h: number): void;
371
-
372
- /** 🌆
373
- * Devuelve una imagen recortada, eliminando los píxeles transparentes de los bordes.
374
- * @returns {Q5.Image}
375
- */
376
- function recortar(): Q5.Imagen;
377
-
378
- /** 🌆
379
- * Habilita el renderizado suave de imágenes mostradas más grandes que
380
- * su tamaño real. Esta es la configuración por defecto, así que ejecutar esta
381
- * función solo tiene efecto si se ha llamado a `noSuavizar`.
382
- * @example
383
- * await Lienzo(200);
384
- * let icono = await cargar('/q5js_icon.png');
385
- * imagen(icono, -100, -100, 200, 200);
386
- */
387
- function suavizar(): void;
388
-
389
- /** 🌆
390
- * Deshabilita el renderizado suave de imágenes para un aspecto pixelado.
391
- * @example
392
- * await Lienzo(200);
393
- *
394
- * let icono = await cargar('/q5js_icon.png');
395
- *
396
- * noSuavizar();
397
- * imagen(icono, -100, -100, 200, 200);
398
- */
399
- function noSuavizar(): void;
400
-
401
- /** 🌆
402
- * Aplica un tinte (superposición de color) al dibujo.
403
- *
404
- * El valor alfa del color de tinte determina la
405
- * fuerza del tinte. Para cambiar la opacidad de una imagen,
406
- * usa la función `opacidad`.
407
- *
408
- * El teñido afecta a todas las imágenes dibujadas posteriormente. El color de tinte
409
- * se aplica a las imágenes usando el modo de mezcla "multiply".
410
- *
411
- * Dado que el proceso de teñido es intensivo en rendimiento, cada vez
412
- * que se tiñe una imagen, q5 almacena en caché el resultado. `imagen` dibujará la
413
- * imagen teñida en caché a menos que el color de tinte haya cambiado o la
414
- * imagen que se está tiñendo haya sido editada.
415
- *
416
- * Si necesitas dibujar una imagen múltiples veces cada fotograma con
417
- * diferentes tintes, considera hacer copias de la imagen y teñir
418
- * cada copia por separado.
419
- * @param {string | number} color color de tinte
420
- * @example
421
- * await Lienzo(200);
422
- *
423
- * let logo = await cargar('/q5js_logo.avif');
424
- *
425
- * teñir(1, 0, 0, 0.5);
426
- * imagen(logo, -100, -100, 200, 200);
427
- */
428
- function teñir(color: string | number): void;
429
-
430
- /** 🌆
431
- * Las imágenes dibujadas después de ejecutar esta función no serán teñidas.
432
- */
433
- function noTeñir(): void;
434
-
435
- /** 🌆
436
- * Enmascara la imagen con otra imagen.
437
- * @param {Q5.Image} img imagen a usar como máscara
438
- */
439
- function enmascarar(img: Q5.Imagen): void;
440
-
441
- /** 🌆
442
- * Devuelve una copia de la imagen.
443
- * @returns {Q5.Image}
444
- */
445
- function copiar(): Q5.Imagen;
446
-
447
- /** 🌆
448
- * Muestra una región de la imagen en otra región de la imagen.
449
- * Se puede usar para crear un detalle insertado, también conocido como efecto de lupa.
450
- * @param {number} sx coordenada x de la región fuente
451
- * @param {number} sy coordenada y de la región fuente
452
- * @param {number} sw ancho de la región fuente
453
- * @param {number} sh alto de la región fuente
454
- * @param {number} dx coordenada x de la región destino
455
- * @param {number} dy coordenada y de la región destino
456
- * @param {number} dw ancho de la región destino
457
- * @param {number} dh alto de la región destino
458
- * @example
459
- * await Lienzo(200);
460
- *
461
- * let logo = await cargar('/q5js_logo.avif');
462
- *
463
- * logo.insertado(256, 256, 512, 512, 0, 0, 256, 256);
464
- * imagen(logo, -100, -100, 200, 200);
465
- */
466
- function insertado(sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void;
467
-
468
- /** 🌆
469
- * Recupera una subsección de una imagen o lienzo como una nueva Imagen Q5
470
- * o el color de un píxel en la imagen o lienzo.
471
- *
472
- * Si solo se especifican x e y, esta función devuelve el color del píxel
473
- * en la coordenada dada en formato de array `[R, G, B, A]`. Si `cargarPíxeles`
474
- * nunca se ha ejecutado, es ejecutado por esta función.
475
- *
476
- * Si haces cambios en el lienzo o imagen, debes llamar a `cargarPíxeles`
477
- * antes de usar esta función para obtener los datos de color actuales.
478
- *
479
- * No aplicable a lienzos WebGPU.
480
- * @param {number} x
481
- * @param {number} y
482
- * @param {number} [w] ancho del área, por defecto es 1
483
- * @param {number} [h] alto del área, por defecto es 1
484
- * @returns {Q5.Image | number[]}
485
- * @example
486
- * await Lienzo(200);
487
- *
488
- * let logo = await cargar('/q5js_logo.avif');
489
- *
490
- * let recortada = logo.obtener(256, 256, 512, 512);
491
- * imagen(recortada, -100, -100, 200, 200);
492
- */
493
- function obtener(x: number, y: number, w?: number, h?: number): Q5.Imagen | number[];
494
-
495
- /** 🌆
496
- * Establece el color de un píxel en la imagen o lienzo. El modo de color debe ser RGB.
497
- *
498
- * O si se proporciona un lienzo o imagen, se dibuja encima de la
499
- * imagen o lienzo de destino, ignorando su configuración de tinte.
500
- *
501
- * Ejecuta `actualizarPíxeles` para aplicar los cambios.
502
- *
503
- * No aplicable a lienzos WebGPU.
504
- * @param {number} x
505
- * @param {number} y
506
- * @param {any} val color, lienzo, o imagen
507
- * @example
508
- * await Lienzo(200);
509
- *
510
- * let c = color('lime');
511
- * let img = crearImagen(50, 50);
512
- *
513
- * q5.dibujar = function () {
514
- * img.establecer(aleatorio(50), aleatorio(50), c);
515
- * img.actualizarPíxeles();
516
- *
517
- * fondo(img);
518
- * };
519
- */
520
- function establecer(x: number, y: number, val: any): void;
521
-
522
- /** 🌆
523
- * Array de datos de color de píxeles de un lienzo o imagen.
524
- *
525
- * Vacío por defecto, obtener el dato ejecutando `cargarPíxeles`.
526
- *
527
- * Cada píxel está representado por cuatro valores consecutivos en el array,
528
- * correspondientes a sus canales rojo, verde, azul y alfa.
529
- *
530
- * Los datos del píxel superior izquierdo están al principio del array
531
- * y los datos del píxel inferior derecho están al final, yendo de
532
- * izquierda a derecha y de arriba a abajo.
533
- */
534
- var píxeles: number[];
535
-
536
- /** 🌆
537
- * Carga datos de píxeles en `píxeles` desde el lienzo o imagen.
538
- *
539
- * El ejemplo a continuación establece el canal verde de algunos píxeles
540
- * a un valor aleatorio.
541
- *
542
- * No aplicable a lienzos WebGPU.
543
- * @example
544
- * frecuenciaRefresco(5);
545
- * let icono = cargarImagen('/q5js_icon.png');
546
- *
547
- * q5.dibujar = function () {
548
- * icono.cargarPíxeles();
549
- * for (let i = 0; i < icono.píxeles.length; i += 16) {
550
- * icono.píxeles[i + 1] = aleatorio(1);
551
- * }
552
- * icono.actualizarPíxeles();
553
- * fondo(icono);
554
- * };
555
- */
556
- function cargarPíxeles(): void;
557
-
558
- /** 🌆
559
- * Aplica cambios en el array `píxeles` al lienzo o imagen.
560
- *
561
- * No aplicable a lienzos WebGPU.
562
- * @example
563
- * await Lienzo(200);
564
- * let c = color('pink');
565
- *
566
- * let img = crearImagen(50, 50);
567
- * for (let x = 0; x < 50; x += 3) {
568
- * for (let y = 0; y < 50; y += 3) {
569
- * img.establecer(x, y, c);
570
- * }
571
- * }
572
- * img.actualizarPíxeles();
573
- *
574
- * fondo(img);
575
- */
576
- function actualizarPíxeles(): void;
577
-
578
- /** 🌆
579
- * Aplica un filtro a la imagen.
580
- *
581
- * Mira la documentación de las constantes de filtro de q5 a continuación para más información.
582
- *
583
- * También se puede usar una cadena de filtro CSS.
584
- * https://developer.mozilla.org/docs/Web/CSS/filter
585
- *
586
- * No aplicable a lienzos WebGPU.
587
- * @param {string} tipo tipo de filtro o una cadena de filtro CSS
588
- * @param {number} [valor] valor opcional, depende del tipo de filtro
589
- * @example
590
- * await Lienzo(200);
591
- * let logo = await cargar('/q5js_logo.avif');
592
- * logo.filtro(INVERTIR);
593
- * imagen(logo, -100, -100, 200, 200);
594
- */
595
- function filtro(tipo: string, valor?: number): void;
596
-
597
- /** 🌆
598
- * Convierte la imagen a píxeles blancos y negros dependiendo si están por encima o por debajo de cierto umbral.
599
- */
600
- const UMBRAL: 1;
601
-
602
- /** 🌆
603
- * Convierte la imagen a escala de grises estableciendo cada píxel a su luminancia.
604
- */
605
- const GRIS: 2;
606
-
607
- /** 🌆
608
- * Establece el canal alfa a totalmente opaco.
609
- */
610
- const OPACO: 3;
611
-
612
- /** 🌆
613
- * Invierte el color de cada píxel.
614
- */
615
- const INVERTIR: 4;
616
-
617
- /** 🌆
618
- * Limita cada canal de la imagen al número de colores especificado como argumento.
619
- */
620
- const POSTERIZAR: 5;
621
-
622
- /** 🌆
623
- * Aumenta el tamaño de las áreas brillantes.
624
- */
625
- const DILATAR: 6;
626
-
627
- /** 🌆
628
- * Aumenta el tamaño de las áreas oscuras.
629
- */
630
- const EROSIONAR: 7;
631
-
632
- /** 🌆
633
- * Aplica un desenfoque gaussiano a la imagen.
634
- */
635
- const DESENFOCAR: 8;
636
-
637
- /** 🌆
638
- * Crea una nueva imagen.
639
- * @param {number} w ancho
640
- * @param {number} h alto
641
- * @param {any} [opt] configuraciones opcionales para la imagen
642
- * @returns {Q5.Image}
643
- */
644
- function crearImagen(w: number, h: number, opt?: any): Q5.Imagen;
645
-
646
- /** 🌆
647
- * Crea un búfer de gráficos.
648
- *
649
- * Deshabilitado por defecto en q5 WebGPU.
650
- * Mira el issue [#104](https://github.com/q5js/q5.js/issues/104) para detalles.
651
- * @param {number} w ancho
652
- * @param {number} h alto
653
- * @param {object} [opt] opciones
654
- * @returns {Q5} un nuevo búfer de gráficos Q5
655
- */
656
- function crearGráficos(w: number, h: number, opt?: any): Q5;
657
-
658
- // 📘 texto
659
-
660
- /** 📘
661
- * Renderiza texto en el lienzo.
662
- *
663
- * El texto se puede posicionar con los parámetros x e y
664
- * y opcionalmente se puede restringir.
665
- * @param {string} str cadena de texto a mostrar
666
- * @param {number} x coordenada-x de la posición del texto
667
- * @param {number} y coordenada-y de la posición del texto
668
- * @param {number} [anchoEnvoltura] ancho máximo de línea en caracteres
669
- * @param {number} [limiteLineas] número máximo de líneas
670
- * @example
671
- * await Lienzo(200, 100);
672
- * fondo('silver');
673
- *
674
- * tamañoTexto(32);
675
- * texto('Hello, world!', -88, 10);
676
- * @example
677
- * await Lienzo(200);
678
- * fondo(0.8);
679
- * tamañoTexto(20);
680
- *
681
- * let info =
682
- * 'q5.js was designed to make creative coding fun and accessible for a new generation of artists, designers, educators, and beginners.';
683
- *
684
- * texto(info, -88, -70, 20, 6);
685
- * //
686
- * //
687
- */
688
- function texto(str: string, x: number, y: number, anchoEnvoltura?: number, limiteLineas?: number): void;
689
-
690
- /** 📘
691
- * Carga una fuente desde una URL.
692
- *
693
- * El archivo de fuente puede estar en cualquier formato aceptado en CSS, como
694
- * archivos .ttf y .otf. El primer ejemplo a continuación carga
695
- * [Robotica](https://www.dafont.com/robotica-courtney.font).
696
- *
697
- * También soporta cargar [fuentes de Google](https://fonts.google.com/).
698
- * El segundo ejemplo carga
699
- * [Pacifico](https://fonts.google.com/specimen/Pacifico).
700
- *
701
- * Si no se cargan fuentes, se usa la fuente sans-serif por defecto.
702
- *
703
- * Por defecto, los recursos se cargan en paralelo antes de que q5 ejecute `dibujar`. Usa `await` para esperar a que una fuente se cargue.
704
- *
705
- * En q5 WebGPU, las fuentes en [formato MSDF](https://github.com/q5js/q5.js/wiki/q5-WebGPU-renderer#text-rendering)
706
- * con el archivo terminando en "-msdf.json" se pueden usar para renderizado de texto de alto rendimiento. Haz la tuya usando el [convertidor de fuentes MSDF](https://msdf-bmfont.donmccurdy.com/).
707
- * @param {string} url URL de la fuente a cargar
708
- * @returns {FontFace & PromiseLike<FontFace>} fuente
709
- * @example
710
- * await Lienzo(200, 56);
711
- *
712
- * await cargarFuente('/assets/Robotica.ttf');
713
- *
714
- * relleno('skyblue');
715
- * tamañoTexto(64);
716
- * imagenTexto('Hello!', -98, 24);
717
- * @example
718
- * await Lienzo(200, 74);
719
- *
720
- * cargarFuente('fonts.googleapis.com/css2?family=Pacifico');
721
- *
722
- * q5.dibujar = function () {
723
- * relleno('hotpink');
724
- * tamañoTexto(68);
725
- * imagenTexto('Hello!', -98, 31);
726
- * };
727
- * @example
728
- * await Lienzo(200, 74);
729
- *
730
- * await cargarFuente('sans-serif'); // msdf
731
- *
732
- * relleno('white');
733
- * tamañoTexto(68);
734
- * imagenTexto('Hello!', -98, 31);
735
- */
736
- function cargarFuente(url: string): FontFace & PromiseLike<FontFace>;
737
-
738
- /** 📘
739
- * Establece la fuente actual a usar para renderizar texto.
740
- *
741
- * Por defecto, la fuente se establece a la [familia de fuentes CSS](https://developer.mozilla.org/docs/Web/CSS/font-family)
742
- * "sans-serif" o la última fuente cargada.
743
- * @param {string} nombreFuente nombre de la familia de fuentes o un objeto FontFace
744
- * @example
745
- * await Lienzo(200, 160);
746
- * fondo(0.8);
747
- *
748
- * fuenteTexto('serif');
749
- *
750
- * q5.dibujar = function () {
751
- * tamañoTexto(32);
752
- * texto('Hello, world!', -96, 10);
753
- * };
754
- * @example
755
- * await Lienzo(200);
756
- * fondo(0.8);
757
- *
758
- * fuenteTexto('monospace');
759
- *
760
- * q5.dibujar = function () {
761
- * texto('Hello, world!', -68, 10);
762
- * };
763
- */
764
- function fuenteTexto(nombreFuente: string): void;
765
-
766
- /** 📘
767
- * Establece u obtiene el tamaño de fuente actual. Si no se proporciona argumento, devuelve el tamaño de fuente actual.
768
- * @param {number} [tamaño] tamaño de la fuente en píxeles
769
- * @returns {number | void} tamaño de fuente actual cuando no se proporciona argumento
770
- * @example
771
- * q5.dibujar = function () {
772
- * fondo(0.8);
773
- *
774
- * tamañoTexto(abs(ratónX));
775
- * texto('A', -90, 90);
776
- * };
777
- */
778
- function tamañoTexto(tamaño?: number): number | void;
779
-
780
- /** 📘
781
- * Establece u obtiene la altura de línea actual. Si no se proporciona argumento, devuelve la altura de línea actual.
782
- * @param {number} [interlineado] altura de línea en píxeles
783
- * @returns {number | void} altura de línea actual cuando no se proporciona argumento
784
- * @example
785
- * q5.dibujar = function () {
786
- * fondo(0.8);
787
- *
788
- * tamañoTexto(abs(ratónX));
789
- * texto('A', -90, 90);
790
- * rect(-90, 90, 5, -interlineado());
791
- * };
792
- */
793
- function interlineado(interlineado?: number): number | void;
794
-
795
- /** 📘
796
- * Establece el estilo de texto actual.
797
- *
798
- * No aplicable a WebGPU cuando se usan fuentes MSDF.
799
- * @param {'normal' | 'italic' | 'bold' | 'bolditalic'} estilo estilo de fuente
800
- * @example
801
- * await Lienzo(200);
802
- * fondo(0.8);
803
- *
804
- * estiloTexto(CURSIVA);
805
- *
806
- * tamañoTexto(32);
807
- * texto('Hello, world!', -88, 6);
808
- */
809
- function estiloTexto(estilo: 'normal' | 'italic' | 'bold' | 'bolditalic'): void;
810
-
811
- /** 📘
812
- * Establece la alineación horizontal y vertical del texto.
813
- * @param {'left' | 'center' | 'right'} horiz alineación horizontal
814
- * @param {'top' | 'middle' | 'bottom' | 'alphabetic'} [vert] alineación vertical
815
- * @example
816
- * await Lienzo(200);
817
- * fondo(0.8);
818
- * tamañoTexto(32);
819
- *
820
- * alineaciónTexto(CENTRO, MEDIO);
821
- * texto('Hello, world!', 0, 0);
822
- */
823
- function alineaciónTexto(horiz: 'left' | 'center' | 'right', vert?: 'top' | 'middle' | 'bottom' | 'alphabetic'): void;
824
-
825
- /** 📘
826
- * Establece el peso del texto.
827
- *
828
- * - 100: delgado
829
- * - 200: extra-ligero
830
- * - 300: ligero
831
- * - 400: normal/regular
832
- * - 500: medio
833
- * - 600: semi-negrita
834
- * - 700: negrita
835
- * - 800: más negrita/extra-negrita
836
- * - 900: negro/pesado
837
- * @param {number | string} peso peso de la fuente
838
- * @example
839
- * await Lienzo(200);
840
- * fondo(0.8);
841
- * tamañoTexto(32);
842
- * alineaciónTexto(CENTRO, MEDIO);
843
- *
844
- * pesoTexto(100);
845
- * texto('Hello, world!', 0, 0);
846
- */
847
- function pesoTexto(peso: number | string): void;
848
-
849
- /** 📘
850
- * Calcula y devuelve el ancho de una cadena de texto dada.
851
- * @param {string} str cadena a medir
852
- * @returns {number} ancho del texto en píxeles
853
- * @example
854
- * q5.dibujar = function () {
855
- * fondo(0.8);
856
- *
857
- * tamañoTexto(abs(ratónX));
858
- * rect(-90, 90, anchoTexto('A'), -interlineado());
859
- * texto('A', -90, 90);
860
- * };
861
- */
862
- function anchoTexto(str: string): number;
863
-
864
- /** 📘
865
- * 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.
866
- * @param {string} str cadena a medir
867
- * @returns {number} ascenso del texto en píxeles
868
- * @example
869
- * q5.dibujar = function () {
870
- * fondo(0.8);
871
- *
872
- * tamañoTexto(abs(ratónX));
873
- * rect(-90, 90, anchoTexto('A'), -ascensoTexto());
874
- * texto('A', -90, 90);
875
- * };
876
- */
877
- function ascensoTexto(str: string): number;
878
-
879
- /** 📘
880
- * 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.
881
- * @param {string} str cadena a medir
882
- * @returns {number} descenso del texto en píxeles
883
- * @example
884
- * await Lienzo(200);
885
- * fondo(0.8);
886
- * tamañoTexto(64);
887
- *
888
- * rect(-100, 0, 200, descensoTexto('q5'));
889
- * texto('q5', -90, 0);
890
- */
891
- function descensoTexto(str: string): number;
892
-
893
- /** 📘
894
- * Crea una imagen a partir de una cadena de texto.
895
- * @param {string} str cadena de texto
896
- * @param {number} [anchoEnvoltura] ancho máximo de línea en caracteres
897
- * @param {number} [limiteLineas] número máximo de líneas
898
- * @returns {Q5.Image} un objeto de imagen representando el texto renderizado
899
- * @example
900
- * await Lienzo(200);
901
- * tamañoTexto(96);
902
- *
903
- * let img = crearImagenTexto('🐶');
904
- * img.filtro(INVERTIR);
905
- *
906
- * q5.dibujar = function () {
907
- * imagen(img, -45, -90);
908
- * };
909
- */
910
- function crearImagenTexto(str: string, anchoEnvoltura: number, limiteLineas: number): Q5.Imagen;
911
-
912
- /** 📘
913
- * Renderiza una imagen generada a partir de texto en el lienzo.
914
- *
915
- * Si el primer parámetro es una cadena, se creará y almacenará en caché automáticamente
916
- * una imagen del texto.
917
- *
918
- * El posicionamiento de la imagen se ve afectado por la configuración actual de
919
- * alineación de texto y línea base.
920
- *
921
- * En q5 WebGPU, esta función es la única forma de dibujar texto multicolor,
922
- * como emojis, y de usar fuentes que no están en formato MSDF.
923
- * Usar esta función para dibujar texto que cambia cada fotograma tiene
924
- * un costo de rendimiento muy alto.
925
- * @param {Q5.Image | string} img imagen o texto
926
- * @param {number} x coordenada-x donde se debe colocar la imagen
927
- * @param {number} y coordenada-y donde se debe colocar la imagen
928
- * @example
929
- * await Lienzo(200);
930
- * fondo(0.8);
931
- * tamañoTexto(96);
932
- * alineaciónTexto(CENTRO, CENTRO);
933
- *
934
- * imagenTexto('🐶', 0, 0);
935
- * @example
936
- * await Lienzo(200);
937
- *
938
- * await cargar('/assets/Robotica.ttf');
939
- *
940
- * fondo(0.8);
941
- * tamañoTexto(66);
942
- * imagenTexto('Hello!', -100, 100);
943
- */
944
- function imagenTexto(img: Q5.Imagen | String, x: number, y: number): void;
945
-
946
- /** 📘
947
- * Formateador de números, se puede usar para mostrar un número como una cadena con
948
- * un número especificado de dígitos antes y después del punto decimal,
949
- * opcionalmente añadiendo relleno con ceros.
950
- * @param {number} n número a formatear
951
- * @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
952
- * @param {number} r número de dígitos que aparecen después del punto decimal
953
- * @returns {string} una representación de cadena del número, formateada en consecuencia
954
- * @example
955
- * await Lienzo(200, 100);
956
- * fondo(0.8);
957
- *
958
- * tamañoTexto(32);
959
- * texto(nf(PI, 4, 5), -90, 10);
960
- */
961
- function nf(num: number, digitos: number): string;
962
-
963
- /** 📘
964
- * Estilo de fuente normal.
965
- */
966
- const NORMAL: 'normal';
967
-
968
- /** 📘
969
- * Estilo de fuente cursiva.
970
- */
971
- const CURSIVA: 'italic';
972
-
973
- /** 📘
974
- * Peso de fuente negrita.
975
- */
976
- const NEGRILLA: 'bold';
977
-
978
- /** 📘
979
- * Estilo de fuente negrita y cursiva.
980
- */
981
- const NEGRILLA_CURSIVA: 'italic bold';
982
-
983
- /** 📘
984
- * Alinear texto a la izquierda.
985
- */
986
- const IZQUIERDA: 'left';
987
-
988
- /** 📘
989
- * Alinear texto al centro.
990
- */
991
- const CENTRO: 'center';
992
-
993
- /** 📘
994
- * Alinear texto a la derecha.
995
- */
996
- const DERECHA: 'right';
997
-
998
- /** 📘
999
- * Alinear texto arriba.
1000
- */
1001
- const ARRIBA: 'top';
1002
-
1003
- /** 📘
1004
- * Alinear texto abajo.
1005
- */
1006
- const ABAJO: 'bottom';
1007
-
1008
- /** 📘
1009
- * Alinear texto a la línea base (alfabética).
1010
- */
1011
- const LINEA_BASE: 'alphabetic';
1012
-
1013
- // 🖲 entrada
1014
-
1015
- /**
1016
- * El manejo de entrada de q5 es muy básico.
1017
- *
1018
- * Para un mejor manejo de entrada, incluyendo soporte para controladores de juegos, considera usar el addon [p5play](https://p5play.org/) con q5.
1019
- *
1020
- * Ten en cuenta que las respuestas de entrada dentro de `dibujar` pueden retrasarse
1021
- * hasta un ciclo de fotograma: desde el momento exacto en que ocurre un evento de entrada
1022
- * hasta la próxima vez que se dibuja un fotograma.
1023
- *
1024
- * Reproduce sonidos o activa otra retroalimentación no visual inmediatamente
1025
- * respondiendo a eventos de entrada dentro de funciones como
1026
- * `alPresionarRatón` y `alPresionarTecla`.
1027
- */
1028
-
1029
- /** 🖲
1030
- * Posición X actual del ratón.
1031
- * @example
1032
- * q5.dibujar = function () {
1033
- * fondo(0.8);
1034
- * tamañoTexto(64);
1035
- * texto(redondear(ratónX), -50, 20);
1036
- * };
1037
- */
1038
- let ratónX: number;
1039
-
1040
- /** 🖲
1041
- * Posición Y actual del ratón.
1042
- * @example
1043
- * q5.dibujar = function () {
1044
- * fondo(0.8);
1045
- * círculo(0, ratónY, 100);
1046
- * };
1047
- */
1048
- let ratónY: number;
1049
-
1050
- /** 🖲
1051
- * Posición X previa del ratón.
1052
- */
1053
- let pRatónX: number;
1054
-
1055
- /** 🖲
1056
- * Posición Y previa del ratón.
1057
- */
1058
- let pRatónY: number;
1059
-
1060
- /** 🖲
1061
- * El botón actual siendo presionado: 'left', 'right', 'center').
1062
- *
1063
- * El valor por defecto es una cadena vacía.
1064
- * @example
1065
- * q5.dibujar = function () {
1066
- * fondo(0.8);
1067
- * tamañoTexto(64);
1068
- * texto(botónRatón, -80, 20);
1069
- * };
1070
- */
1071
- let botónRatón: string;
1072
-
1073
- /** 🖲
1074
- * Verdadero si el ratón está actualmente presionado, falso de lo contrario.
1075
- * @example
1076
- * q5.dibujar = function () {
1077
- * if (ratónPresionado) fondo(0.4);
1078
- * else fondo(0.8);
1079
- * };
1080
- */
1081
- let ratónPresionado: boolean;
1082
-
1083
- /** 🖲
1084
- * Define esta función para responder a eventos de presionar el ratón.
1085
- * @example
1086
- * await Lienzo(200);
1087
- * let gris = 0.4;
1088
- *
1089
- * q5.alPresionarRatón = function () {
1090
- * fondo(gris);
1091
- * gris = (gris + 0.1) % 1;
1092
- * };
1093
- */
1094
- function alPresionarRatón(): void;
1095
-
1096
- /** 🖲
1097
- * Define esta función para responder a eventos de soltar el ratón.
1098
- * @example
1099
- * await Lienzo(200);
1100
- * let gris = 0.4;
1101
- *
1102
- * q5.alSoltarRatón = function () {
1103
- * fondo(gris);
1104
- * gris = (gris + 0.1) % 1;
1105
- * };
1106
- */
1107
- function alSoltarRatón(): void;
1108
-
1109
- /** 🖲
1110
- * Define esta función para responder a eventos de mover el ratón.
1111
- *
1112
- * En dispositivos con pantalla táctil esta función no se llama
1113
- * cuando el usuario arrastra su dedo en la pantalla.
1114
- * @example
1115
- * await Lienzo(200);
1116
- * let gris = 0.4;
1117
- *
1118
- * q5.alMoverRatón = function () {
1119
- * fondo(gris);
1120
- * gris = (gris + 0.005) % 1;
1121
- * };
1122
- */
1123
- function alMoverRatón(): void;
1124
-
1125
- /** 🖲
1126
- * Define esta función para responder a eventos de arrastrar el ratón.
1127
- *
1128
- * Arrastrar el ratón se define como mover el ratón
1129
- * mientras un botón del ratón está presionado.
1130
- * @example
1131
- * await Lienzo(200);
1132
- * let gris = 0.4;
1133
- *
1134
- * q5.alArrastrarRatón = function () {
1135
- * fondo(gris);
1136
- * gris = (gris + 0.005) % 1;
1137
- * };
1138
- */
1139
- function alArrastrarRatón(): void;
1140
-
1141
- /** 🖲
1142
- * Define esta función para responder a eventos de doble clic del ratón.
1143
- * @example
1144
- * await Lienzo(200);
1145
- * let gris = 0.4;
1146
- *
1147
- * q5.dobleClic = function () {
1148
- * fondo(gris);
1149
- * gris = (gris + 0.1) % 1;
1150
- * };
1151
- */
1152
- function dobleClic(): void;
1153
-
1154
- /** 🖲
1155
- * El nombre de la última tecla presionada.
1156
- * @example
1157
- * q5.dibujar = function () {
1158
- * fondo(0.8);
1159
- * tamañoTexto(64);
1160
- * texto(tecla, -80, 20);
1161
- * };
1162
- */
1163
- let tecla: string;
1164
-
1165
- /** 🖲
1166
- * Verdadero si una tecla está actualmente presionada, falso de lo contrario.
1167
- * @example
1168
- * q5.dibujar = function () {
1169
- * if (teclaPresionada) fondo(0.4);
1170
- * else fondo(0.8);
1171
- * };
1172
- */
1173
- let teclaPresionada: boolean;
1174
-
1175
- /** 🖲
1176
- * Devuelve verdadero si el usuario está presionando la tecla especificada, falso
1177
- * de lo contrario. Acepta nombres de teclas insensibles a mayúsculas.
1178
- * @param {string} tecla tecla a comprobar
1179
- * @returns {boolean} verdadero si la tecla está presionada, falso de lo contrario
1180
- * @example
1181
- * q5.dibujar = function () {
1182
- * fondo(0.8);
1183
- *
1184
- * if (teclaEstaPresionada('f') && teclaEstaPresionada('j')) {
1185
- * rect(-50, -50, 100, 100);
1186
- * }
1187
- * };
1188
- */
1189
- function teclaEstaPresionada(tecla: string): boolean;
1190
-
1191
- /** 🖲
1192
- * Define esta función para responder a eventos de presionar tecla.
1193
- * @example
1194
- * await Lienzo(200);
1195
- * let gris = 0.4;
1196
- *
1197
- * q5.alPresionarTecla = function () {
1198
- * fondo(gris);
1199
- * gris = (gris + 0.1) % 1;
1200
- * };
1201
- */
1202
- function alPresionarTecla(): void;
1203
-
1204
- /** 🖲
1205
- * Define esta función para responder a eventos de soltar tecla.
1206
- * @example
1207
- * await Lienzo(200);
1208
- * let gris = 0.4;
1209
- *
1210
- * q5.alSoltarTecla = function () {
1211
- * fondo(gris);
1212
- * gris = (gris + 0.1) % 1;
1213
- * };
1214
- */
1215
- function alSoltarTecla(): void;
1216
-
1217
- /** 🖲
1218
- * Array que contiene todos los puntos de toque actuales dentro de la
1219
- * ventana del navegador. Cada toque es un objeto con
1220
- * propiedades `id`, `x`, e `y`.
1221
- * @example
1222
- * q5.dibujar = function () {
1223
- * fondo(0.8);
1224
- * for (let toque of toques) {
1225
- * círculo(toque.x, toque.y, 100);
1226
- * }
1227
- * };
1228
- */
1229
- let toques: any[];
1230
-
1231
- /** 🖲
1232
- * Define esta función para responder a eventos de inicio de toque
1233
- * en el lienzo.
1234
- *
1235
- * Devuelve true para habilitar gestos táctiles como pellizcar para hacer zoom
1236
- * y desplazarse, que q5 deshabilita en el lienzo por defecto.
1237
- * @example
1238
- * await Lienzo(200);
1239
- * let gris = 0.4;
1240
- *
1241
- * q5.alEmpezarToque = function () {
1242
- * fondo(gris);
1243
- * gris = (gris + 0.1) % 1;
1244
- * };
1245
- */
1246
- function alEmpezarToque(): void;
1247
-
1248
- /** 🖲
1249
- * Define esta función para responder a eventos de fin de toque
1250
- * en el lienzo.
1251
- *
1252
- * Devuelve true para habilitar gestos táctiles como pellizcar para hacer zoom
1253
- * y desplazarse, que q5 deshabilita en el lienzo por defecto.
1254
- * @example
1255
- * await Lienzo(200);
1256
- * let gris = 0.4;
1257
- *
1258
- * q5.alTerminarToque = function () {
1259
- * fondo(gris);
1260
- * gris = (gris + 0.1) % 1;
1261
- * };
1262
- */
1263
- function alTerminarToque(): void;
1264
-
1265
- /** 🖲
1266
- * Define esta función para responder a eventos de movimiento de toque
1267
- * en el lienzo.
1268
- *
1269
- * Devuelve true para habilitar gestos táctiles como pellizcar para hacer zoom
1270
- * y desplazarse, que q5 deshabilita en el lienzo por defecto.
1271
- * @example
1272
- * await Lienzo(200);
1273
- * let gris = 0.4;
1274
- *
1275
- * q5.alMoverToque = function () {
1276
- * fondo(gris);
1277
- * gris = (gris + 0.005) % 1;
1278
- * };
1279
- */
1280
- function alMoverToque(): void;
1281
-
1282
- /** 🖲
1283
- * Objeto que contiene todos los punteros actuales dentro de la
1284
- * ventana del navegador.
1285
- *
1286
- * Esto incluye ratón, toque y punteros de lápiz.
1287
- *
1288
- * Cada puntero es un objeto con
1289
- * propiedades `event`, `x`, e `y`.
1290
- * La propiedad `event` contiene el
1291
- * [PointerEvent](https://developer.mozilla.org/docs/Web/API/PointerEvent) original.
1292
- * @example
1293
- * q5.dibujar = function () {
1294
- * fondo(0.8);
1295
- * for (let punteroID in punteros) {
1296
- * let puntero = punteros[punteroID];
1297
- * círculo(puntero.x, puntero.y, 100);
1298
- * }
1299
- * };
1300
- */
1301
- let punteros: {};
1302
-
1303
- /** 🖲
1304
- * Establece el cursor a un [tipo de cursor CSS](https://developer.mozilla.org/docs/Web/CSS/cursor) o imagen.
1305
- * Si se proporciona una imagen, las coordenadas x e y opcionales pueden
1306
- * especificar el punto activo del cursor.
1307
- * @param {string} nombre nombre del cursor o la url a una imagen
1308
- * @param {number} [x] coordenada x del punto del cursor
1309
- * @param {number} [y] coordenada y del punto del cursor
1310
- * @example
1311
- * await Lienzo(200, 100);
1312
- * cursor('pointer');
1313
- */
1314
- function cursor(nombre: string, x?: number, y?: number): void;
1315
-
1316
- /** 🖲
1317
- * Oculta el cursor dentro de los límites del lienzo.
1318
- * @example
1319
- * await Lienzo(200, 100);
1320
- * sinCursor();
1321
- */
1322
- function sinCursor(): void;
1323
-
1324
- /** 🖲
1325
- * Define esta función para responder a eventos de la rueda del ratón.
1326
- *
1327
- * `event.deltaX` y `event.deltaY` son las cantidades de desplazamiento horizontal y vertical,
1328
- * respectivamente.
1329
- *
1330
- * Devuelve true para permitir el comportamiento por defecto de desplazar la página.
1331
- * @example
1332
- * let x = (y = 0);
1333
- * q5.dibujar = function () {
1334
- * círculo(x, y, 10);
1335
- * };
1336
- * q5.ruedaRatón = function (e) {
1337
- * x += e.deltaX;
1338
- * y += e.deltaY;
1339
- * return false;
1340
- * };
1341
- */
1342
- function ruedaRatón(evento: any): void;
1343
-
1344
- /** 🖲
1345
- * Solicita que el puntero se bloquee al cuerpo del documento, ocultando
1346
- * el cursor y permitiendo un movimiento ilimitado.
1347
- *
1348
- * 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.
1349
- *
1350
- * Para salir del modo de bloqueo de puntero, llama a `document.exitPointerLock()`.
1351
- * @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
1352
- * @example
1353
- * q5.dibujar = function () {
1354
- * círculo(ratónX / 10, ratónY / 10, 10);
1355
- * };
1356
- *
1357
- * q5.dobleClic = function () {
1358
- * if (!document.pointerLockElement) {
1359
- * bloqueoPuntero();
1360
- * } else {
1361
- * document.exitPointerLock();
1362
- * }
1363
- * };
1364
- */
1365
- function bloqueoPuntero(movimientoNoAjustado: boolean): void;
1366
-
1367
- // 🎨 color
1368
-
1369
- /** 🎨
1370
- * Crea un nuevo objeto `Color`, el cual es útil principalmente para almacenar
1371
- * un color que tu sketch reutilizará o modificará más tarde.
1372
- *
1373
- * Con el modo de color por defecto, RGB, los colores tienen componentes `r`/`red` (rojo), `g`/`green` (verde),
1374
- * `b`/`blue` (azul), y `a`/`alpha` (alfa).
1375
- *
1376
- * Las funciones [`relleno`](https://q5js.org/learn/#fill), [`trazo`](https://q5js.org/learn/#stroke), y [`fondo`](https://q5js.org/learn/#background)
1377
- * aceptan la misma amplia gama de representaciones de color que esta función.
1378
- *
1379
- * El formato de color por defecto es "flotante" ("float"), así que
1380
- * establece los componentes de color a valores entre 0 y 1.
1381
- *
1382
- * Aquí hay algunos ejemplos de uso válido:
1383
- *
1384
- * - `color(1)` (escala de grises)
1385
- * - `color(1, 0.8)` (escala de grises, alfa)
1386
- * - `color(1, 0, 0)` (r, g, b)
1387
- * - `color(1, 0, 0, 0.1)` (r, g, b, a)
1388
- * - `color('red')` (nombre de color)
1389
- * - `color('#ff0000')` (color hex)
1390
- * - `color([1, 0, 0])` (componentes de color)
1391
- * @param {string | number | Color | number[]} c0 color o primer componente de color
1392
- * @param {number} [c1] segundo componente de color
1393
- * @param {number} [c2] tercer componente de color
1394
- * @param {number} [c3] cuarto componente de color (alfa)
1395
- * @returns {Color} un nuevo objeto `Color`
1396
- * @example
1397
- * await Lienzo(200);
1398
- * rect(-100, -100, 100, 200);
1399
- *
1400
- * // ( r, g, b, a)
1401
- * let botella = color(0.35, 0.39, 1, 0.4);
1402
- * relleno(botella);
1403
- * trazo(botella);
1404
- * grosorTrazo(30);
1405
- * círculo(0, 0, 155);
1406
- * @example
1407
- * await Lienzo(200);
1408
- * // (gris, alfa)
1409
- * let c = color(0.8, 0.2);
1410
- *
1411
- * q5.dibujar = function () {
1412
- * fondo(c);
1413
- * círculo(ratónX, ratónY, 50);
1414
- * c.g = (c.g + 0.005) % 1;
1415
- * };
1416
- * @example
1417
- * await Lienzo(200);
1418
- *
1419
- * // (r, g, b, a)
1420
- * let c = color(0, 1, 1, 0.2);
1421
- *
1422
- * q5.dibujar = function () {
1423
- * relleno(c);
1424
- * círculo(ratónX, ratónY, 50);
1425
- * };
1426
- */
1427
- function color(c0: string | number | Color | number[], c1?: number, c2?: number, c3?: number): Color;
1428
-
1429
- /** 🎨
1430
- * Establece el modo de color para el sketch, lo cual cambia cómo se
1431
- * interpretan y muestran los colores.
1432
- *
1433
- * La gama de color es 'display-p3' por defecto, si el dispositivo soporta HDR.
1434
- *
1435
- * El modo de color por defecto es RGB en formato flotante.
1436
- * @param {'rgb' | 'oklch' | 'hsl' | 'hsb'} modo modo de color
1437
- * @param {1 | 255} formato formato de color (1 para flotante, 255 para entero)
1438
- * @param {'srgb' | 'display-p3'} [gama] gama de color
1439
- * @example
1440
- * await Lienzo(200);
1441
- *
1442
- * modoColor(RGB, 1);
1443
- * relleno(1, 0, 0);
1444
- * rect(-100, -100, 66, 200);
1445
- * relleno(0, 1, 0);
1446
- * rect(-34, -100, 67, 200);
1447
- * relleno(0, 0, 1);
1448
- * rect(33, -100, 67, 200);
1449
- * @example
1450
- * await Lienzo(200);
1451
- *
1452
- * modoColor(OKLCH);
1453
- *
1454
- * relleno(0.25, 0.15, 0);
1455
- * rect(-100, -100, 100, 200);
1456
- *
1457
- * relleno(0.75, 0.15, 0);
1458
- * rect(0, -100, 100, 200);
1459
- */
1460
- function modoColor(modo: 'rgb' | 'oklch', formato: 1 | 255, gama: 'srgb' | 'display-p3'): void;
1461
-
1462
- /** 🎨
1463
- * Los colores RGB tienen componentes `r`/`red` (rojo), `g`/`green` (verde), `b`/`blue` (azul),
1464
- * y `a`/`alpha` (alfa).
1465
- *
1466
- * Por defecto cuando un lienzo está usando el espacio de color HDR "display-p3",
1467
- * los colores rgb son mapeados a la gama completa P3, incluso cuando usan el
1468
- * formato entero legado 0-255.
1469
- * @example
1470
- * await Lienzo(200, 100);
1471
- *
1472
- * modoColor(RGB);
1473
- *
1474
- * fondo(1, 0, 0);
1475
- */
1476
- const RGB: 'rgb';
1477
-
1478
- /** 🎨
1479
- * Los colores OKLCH tienen componentes `l`/`lightness` (luminosidad), `c`/`chroma` (croma),
1480
- * `h`/`hue` (tono), y `a`/`alpha` (alfa). Es más intuitivo para los humanos
1481
- * trabajar con color en estos términos que con RGB.
1482
- *
1483
- * OKLCH es perceptualmente uniforme, lo que significa que los colores con la
1484
- * misma luminosidad y croma (colorido) parecerán tener
1485
- * igual luminancia, independientemente del tono.
1486
- *
1487
- * OKLCH puede representar con precisión todos los colores visibles para el
1488
- * ojo humano, a diferencia de muchos otros espacios de color que están limitados
1489
- * a una gama. Los valores máximos de luminosidad y croma que
1490
- * corresponden a los límites de la gama sRGB o P3 varían dependiendo del
1491
- * tono. Los colores que están fuera de la gama serán recortados al
1492
- * color dentro de la gama más cercano.
1493
- *
1494
- * Usa el [selector de color OKLCH](https://oklch.com) para encontrar
1495
- * colores dentro de la gama.
1496
- *
1497
- * - `lightness`: 0 a 1
1498
- * - `chroma`: 0 a ~0.4
1499
- * - `hue`: 0 a 360
1500
- * - `alpha`: 0 a 1
1501
- * @example
1502
- * await Lienzo(200, 100);
1503
- *
1504
- * modoColor(OKLCH);
1505
- *
1506
- * fondo(0.64, 0.3, 30);
1507
- * @example
1508
- * await Lienzo(200);
1509
- * modoColor(OKLCH);
1510
- *
1511
- * q5.dibujar = function () {
1512
- * fondo(0.7, 0.16, cuadroActual % 360);
1513
- * };
1514
- */
1515
- const OKLCH: 'oklch';
1516
-
1517
- /** 🎨
1518
- * Los colores HSL tienen componentes `h`/`hue` (tono), `s`/`saturation` (saturación),
1519
- * `l`/`lightness` (luminosidad), y `a`/`alpha` (alfa).
1520
- *
1521
- * HSL fue creado en la década de 1970 para aproximar la percepción humana
1522
- * del color, intercambiando precisión por cálculos más simples. No es
1523
- * perceptualmente uniforme, por lo que colores con la misma luminosidad
1524
- * pueden parecer más oscuros o más claros, dependiendo de su tono
1525
- * y saturación. Sin embargo, los valores de luminosidad y saturación que
1526
- * corresponden a los límites de la gama siempre son 100, independientemente del
1527
- * tono. Esto puede hacer que HSL sea más fácil de trabajar que OKLCH.
1528
- *
1529
- * Los colores HSL son mapeados a la gama completa P3 cuando
1530
- * se usa el espacio de color "display-p3".
1531
- *
1532
- * - `hue`: 0 a 360
1533
- * - `saturation`: 0 a 100
1534
- * - `lightness`: 0 a 100
1535
- * - `alpha`: 0 a 1
1536
- * @example
1537
- * await Lienzo(200, 100);
1538
- *
1539
- * modoColor(HSL);
1540
- *
1541
- * fondo(0, 100, 50);
1542
- * @example
1543
- * await Lienzo(200, 220);
1544
- * sinTrazo();
1545
- *
1546
- * modoColor(HSL);
1547
- * for (let h = 0; h < 360; h += 10) {
1548
- * for (let l = 0; l <= 100; l += 10) {
1549
- * relleno(h, 100, l);
1550
- * rect(h * (11 / 20) - 100, l * 2 - 110, 6, 20);
1551
- * }
1552
- * }
1553
- */
1554
- const HSL: 'hsl';
1555
-
1556
- /** 🎨
1557
- * Los colores HSB tienen componentes `h`/`hue` (tono), `s`/`saturation` (saturación),
1558
- * `b`/`brightness` (brillo) (también conocido como `v`/`value` (valor)), y `a`/`alpha` (alfa).
1559
- *
1560
- * HSB es similar a HSL, pero en lugar de luminosidad
1561
- * (negro a blanco), usa brillo (negro a
1562
- * color completo). Para producir blanco, establece el brillo
1563
- * a 100 y la saturación a 0.
1564
- *
1565
- * - `hue`: 0 a 360
1566
- * - `saturation`: 0 a 100
1567
- * - `brightness`: 0 a 100
1568
- * - `alpha`: 0 a 1
1569
- * @example
1570
- * await Lienzo(200, 100);
1571
- *
1572
- * modoColor(HSB);
1573
- *
1574
- * fondo(0, 100, 100);
1575
- * @example
1576
- * await Lienzo(200, 220);
1577
- * sinTrazo();
1578
- *
1579
- * modoColor(HSB);
1580
- * for (let h = 0; h < 360; h += 10) {
1581
- * for (let b = 0; b <= 100; b += 10) {
1582
- * relleno(h, 100, b);
1583
- * rect(h * (11 / 20) - 100, b * 2 - 110, 6, 20);
1584
- * }
1585
- * }
1586
- */
1587
- const HSB: 'hsb';
1588
-
1589
- /** 🎨
1590
- * Limita la gama de color al espacio de color sRGB.
1591
- *
1592
- * Si tu pantalla es capaz de HDR, nota que el rojo completo aparece
1593
- * menos saturado y oscuro en este ejemplo, como lo haría en
1594
- * una pantalla SDR.
1595
- * @example
1596
- * await Lienzo(200, 100);
1597
- *
1598
- * modoColor(RGB, 1, SRGB);
1599
- *
1600
- * fondo(1, 0, 0);
1601
- */
1602
- const SRGB: 'srgb';
1603
-
1604
- /** 🎨
1605
- * Expande la gama de color al espacio de color P3.
1606
- *
1607
- * Esta es la gama de color por defecto en dispositivos que soportan HDR.
1608
- *
1609
- * Si tu pantalla es capaz de HDR, nota que el rojo completo aparece
1610
- * totalmente saturado y brillante en el siguiente ejemplo.
1611
- * @example
1612
- * await Lienzo(200, 100);
1613
- *
1614
- * modoColor(RGB, 1, DISPLAY_P3);
1615
- *
1616
- * fondo(1, 0, 0);
1617
- */
1618
- const DISPLAY_P3: 'display-p3';
1619
-
1620
- /** 🎨
1621
- * Dibuja sobre todo el lienzo con un color o una imagen.
1622
- *
1623
- * Al igual que la función [`color`](https://q5js.org/learn/#color),
1624
- * esta función puede aceptar colores en una amplia gama de formatos:
1625
- * cadena de color CSS, valor de escala de grises y valores de componentes de color.
1626
- * @param {Color | Q5.Image} relleno un color o una imagen para dibujar
1627
- * @example
1628
- * await Lienzo(200, 100);
1629
- * fondo('crimson');
1630
- * @example
1631
- * q5.dibujar = function () {
1632
- * fondo(0.5, 0.2);
1633
- * círculo(ratónX, ratónY, 20);
1634
- * };
1635
- */
1636
- function fondo(relleno: Color | Q5.Imagen): void;
1637
-
1638
- class Color {
1639
-
1640
- /** 🎨
1641
- * Este constructor acepta estrictamente 4 números, que son los componentes del color.
1642
- *
1643
- * Usa la función `color` para mayor flexibilidad, ejecuta
1644
- * este constructor internamente.
1645
- *
1646
- * `Color` no es realmente una clase en si misma, es una referencia a una
1647
- * clase de color Q5 basada en el modo de color, formato y gama.
1648
- */
1649
- constructor(c0: number, c1: number, c2: number, c3: number);
1650
-
1651
- /** 🎨
1652
- * Comprueba si este color es exactamente igual a otro color.
1653
- */
1654
- igual(otro: Color): boolean;
1655
-
1656
- /** 🎨
1657
- * Comprueba si el color es el mismo que otro color,
1658
- * ignorando sus valores alfa.
1659
- */
1660
- esMismoColor(otro: Color): boolean;
1661
-
1662
- /** 🎨
1663
- * Produce una representación de cadena de color CSS.
1664
- */
1665
- toString(): string;
1666
-
1667
- /** 🎨
1668
- * Un array de los componentes del color.
1669
- */
1670
- niveles: number[];
1671
- }
1672
-
1673
- // 💅 estilos
1674
-
1675
- /** 💅
1676
- * Establece el color de relleno. El defecto es blanco.
1677
- *
1678
- * Como la función [`color`](https://q5js.org/learn/#color), esta función
1679
- * puede aceptar colores en una amplia gama de formatos: como una cadena de color CSS,
1680
- * un objeto `Color`, valor de escala de grises, o valores de componentes de color.
1681
- * @param {Color} color color de relleno
1682
- * @example
1683
- * await Lienzo(200);
1684
- * fondo(0.8);
1685
- *
1686
- * relleno('red');
1687
- * círculo(-20, -20, 80);
1688
- *
1689
- * relleno('lime');
1690
- * cuadrado(-20, -20, 80);
1691
- */
1692
- function relleno(color: Color): void;
1693
-
1694
- /** 💅
1695
- * Establece el color del trazo (contorno). El defecto es negro.
1696
- *
1697
- * Como la función [`color`](https://q5js.org/learn/#color), esta función
1698
- * puede aceptar colores en una amplia gama de formatos: como una cadena de color CSS,
1699
- * un objeto `Color`, valor de escala de grises, o valores de componentes de color.
1700
- * @param {Color} color color de trazo
1701
- * @example
1702
- * await Lienzo(200);
1703
- * fondo(0.8);
1704
- * relleno(0.14);
1705
- *
1706
- * trazo('red');
1707
- * círculo(-20, -20, 80);
1708
- *
1709
- * trazo('lime');
1710
- * cuadrado(-20, -20, 80);
1711
- */
1712
- function trazo(color: Color): void;
1713
-
1714
- /** 💅
1715
- * Después de llamar a esta función, el dibujo no será rellenado.
1716
- * @example
1717
- * await Lienzo(200);
1718
- * fondo(0.8);
1719
- *
1720
- * sinRelleno();
1721
- *
1722
- * trazo('red');
1723
- * círculo(-20, -20, 80);
1724
- * trazo('lime');
1725
- * cuadrado(-20, -20, 80);
1726
- */
1727
- function sinRelleno(): void;
1728
-
1729
- /** 💅
1730
- * Después de llamar a esta función, el dibujo no tendrá un trazo (contorno).
1731
- * @example
1732
- * await Lienzo(200);
1733
- * fondo(0.8);
1734
- * relleno(0.14);
1735
- * trazo('red');
1736
- * círculo(-20, -20, 80);
1737
- *
1738
- * sinTrazo();
1739
- * cuadrado(-20, -20, 80);
1740
- */
1741
- function sinTrazo(): void;
1742
-
1743
- /** 💅
1744
- * Establece el tamaño del trazo usado para líneas y el borde alrededor de dibujos.
1745
- * @param {number} grosor tamaño del trazo en píxeles
1746
- * @example
1747
- * await Lienzo(200);
1748
- * fondo(0.8);
1749
- * trazo('red');
1750
- * círculo(-50, 0, 80);
1751
- *
1752
- * grosorTrazo(12);
1753
- * círculo(50, 0, 80);
1754
- */
1755
- function grosorTrazo(grosor: number): void;
1756
-
1757
- /** 💅
1758
- * Establece la opacidad global, que afecta a todas las operaciones de dibujo posteriores, excepto `fondo`. El defecto es 1, totalmente opaco.
1759
- *
1760
- * En q5 WebGPU esta función solo afecta a imágenes.
1761
- * @param {number} alfa nivel de opacidad, variando de 0 a 1
1762
- * @example
1763
- * await Lienzo(200);
1764
- * fondo(0.8);
1765
- *
1766
- * opacidad(1);
1767
- * círculo(-20, -20, 80);
1768
- *
1769
- * opacidad(0.2);
1770
- * cuadrado(-20, -20, 80);
1771
- */
1772
- function opacidad(alfa: number): void;
1773
-
1774
- /** 💅
1775
- * Establece el color de la sombra. El defecto es transparente (sin sombra).
1776
- *
1777
- * Las sombras se aplican a cualquier cosa dibujada en el lienzo, incluyendo formas rellenas,
1778
- * trazos, texto, e imágenes.
1779
- *
1780
- * Como la función [`color`](https://q5js.org/learn/#color), esta función
1781
- * puede aceptar colores en una amplia gama de formatos: como una cadena de color CSS,
1782
- * un objeto `Color`, valor de escala de grises, o valores de componentes de color.
1783
- *
1784
- * No disponible en q5 WebGPU.
1785
- * @param {Color} color color de sombra
1786
- */
1787
- function sombra(color: string | Color): void;
1788
-
1789
- /** 💅
1790
- * Deshabilita el efecto de sombra.
1791
- *
1792
- * No disponible en q5 WebGPU.
1793
- */
1794
- function sinSombra(): void;
1795
-
1796
- /** 💅
1797
- * Establece el desplazamiento de la sombra y el radio de desenfoque.
1798
- *
1799
- * Cuando q5 comienza, el desplazamiento de la sombra es (10, 10) con un desenfoque de 10.
1800
- *
1801
- * No disponible en q5 WebGPU.
1802
- * @param {number} offsetX desplazamiento horizontal de la sombra
1803
- * @param {number} offsetY desplazamiento vertical de la sombra, por defecto es el mismo que offsetX
1804
- * @param {number} desenfoque radio de desenfoque de la sombra, por defecto es 0
1805
- */
1806
- function cajaSombra(offsetX: number, offsetY: number, desenfoque: number): void;
1807
-
1808
- /** 💅
1809
- * Establece la operación de composición global para el contexto del lienzo.
1810
- *
1811
- * No disponible en q5 WebGPU.
1812
- * @param {string} val operación de composición
1813
- */
1814
- function modoMezcla(val: string): void;
1815
-
1816
- /** 💅
1817
- * Establece el estilo de terminación de línea a `ROUND`, `SQUARE`, o `PROJECT`.
1818
- *
1819
- * No disponible en q5 WebGPU.
1820
- * @param {CanvasLineCap} val estilo de terminación de línea
1821
- */
1822
- function terminaciónTrazo(val: CanvasLineCap): void;
1823
-
1824
- /** 💅
1825
- * Establece el estilo de unión de línea a `ROUND`, `BEVEL`, o `MITER`.
1826
- *
1827
- * No disponible en q5 WebGPU.
1828
- * @param {CanvasLineJoin} val estilo de unión de línea
1829
- */
1830
- function uniónTrazo(val: CanvasLineJoin): void;
1831
-
1832
- /** 💅
1833
- * Establece el lienzo en modo borrar, donde las formas borrarán lo que está
1834
- * debajo de ellas en lugar de dibujar sobre ello.
1835
- *
1836
- * No disponible en q5 WebGPU.
1837
- * @param {number} [rellenoAlfa] nivel de opacidad del color de relleno
1838
- * @param {number} [trazoAlfa] nivel de opacidad del color de trazo
1839
- */
1840
- function borrar(rellenoAlfa?: number, trazoAlfa?: number): void;
1841
-
1842
- /** 💅
1843
- * Reinicia el lienzo del modo borrar al modo de dibujo normal.
1844
- *
1845
- * No disponible en q5 WebGPU.
1846
- */
1847
- function noBorrar(): void;
1848
-
1849
- /** 💅
1850
- * Guarda la configuración de estilo de dibujo actual.
1851
- *
1852
- * Esto incluye el relleno, trazo, grosor de trazo, tinte, modo de imagen,
1853
- * modo de rectángulo, modo de elipse, tamaño de texto, alineación de texto, línea base de texto, y
1854
- * configuración de sombra.
1855
- * @example
1856
- * await Lienzo(200);
1857
- * fondo(0.8);
1858
- *
1859
- * guardarEstilos();
1860
- * relleno('blue');
1861
- * círculo(-50, -50, 80);
1862
- *
1863
- * recuperarEstilos();
1864
- * círculo(50, 50, 80);
1865
- */
1866
- function guardarEstilos(): void;
1867
-
1868
- /** 💅
1869
- * Restaura la configuración de estilo de dibujo guardada previamente.
1870
- * @example
1871
- * await Lienzo(200);
1872
- * fondo(0.8);
1873
- *
1874
- * guardarEstilos();
1875
- * relleno('blue');
1876
- * círculo(-50, -50, 80);
1877
- *
1878
- * recuperarEstilos();
1879
- * círculo(50, 50, 80);
1880
- */
1881
- function recuperarEstilos(): void;
1882
-
1883
- /** 💅
1884
- * Limpia el lienzo, haciendo que cada píxel sea completamente transparente.
1885
- *
1886
- * Ten en cuenta que el lienzo solo se puede ver a través si tiene un canal alfa.
1887
- *
1888
- * #### webgpu
1889
- */
1890
- function limpiar(): void;
1891
-
1892
- /** 💅
1893
- * Comprueba si un punto dado está dentro del área de relleno del camino actual.
1894
- *
1895
- * No disponible en q5 WebGPU.
1896
- * @param {number} x coordenada-x del punto
1897
- * @param {number} y coordenada-y del punto
1898
- * @returns {boolean} verdadero si el punto está dentro del área de relleno, falso de lo contrario
1899
- */
1900
- function enRelleno(x: number, y: number): boolean;
1901
-
1902
- /** 💅
1903
- * Comprueba si un punto dado está dentro del trazo del camino actual.
1904
- *
1905
- * No disponible en q5 WebGPU.
1906
- * @param {number} x coordenada-x del punto
1907
- * @param {number} y coordenada-y del punto
1908
- * @returns {boolean} verdadero si el punto está dentro del trazo, falso de lo contrario
1909
- */
1910
- function enTrazo(x: number, y: number): boolean;
1911
-
1912
- // 🦋 transformaciones
1913
-
1914
- /** 🦋
1915
- * Traslada el origen del contexto de dibujo.
1916
- * @param {number} x traslación a lo largo del eje x
1917
- * @param {number} y traslación a lo largo del eje y
1918
- * @example
1919
- * q5.dibujar = function () {
1920
- * fondo(0.8);
1921
- *
1922
- * trasladar(50, 50);
1923
- * círculo(0, 0, 80);
1924
- * };
1925
- */
1926
- function trasladar(x: number, y: number): void;
1927
-
1928
- /** 🦋
1929
- * Rota el contexto de dibujo.
1930
- * @param {number} angulo ángulo de rotación en radianes
1931
- * @example
1932
- * q5.dibujar = function () {
1933
- * fondo(0.8);
1934
- *
1935
- * rotar(ratónX / 50);
1936
- *
1937
- * modoRect(CENTER);
1938
- * cuadrado(0, 0, 120);
1939
- * };
1940
- */
1941
- function rotar(angulo: number): void;
1942
-
1943
- /** 🦋
1944
- * Escala el contexto de dibujo.
1945
- *
1946
- * Si solo se proporciona un parámetro de entrada,
1947
- * el contexto de dibujo se escalará uniformemente.
1948
- * @param {number} x factor de escala a lo largo del eje x
1949
- * @param {number} [y] factor de escala a lo largo del eje y
1950
- * @example
1951
- * q5.dibujar = function () {
1952
- * fondo(0.8);
1953
- *
1954
- * escalar(ratónX / 10);
1955
- * círculo(0, 0, 20);
1956
- * };
1957
- */
1958
- function escalar(x: number, y?: number): void;
1959
-
1960
- /** 🦋
1961
- * Cizalla el contexto de dibujo a lo largo del eje x.
1962
- * @param {number} angulo ángulo de cizallamiento en radianes
1963
- * @example
1964
- * q5.dibujar = function () {
1965
- * fondo(0.8);
1966
- *
1967
- * trasladar(-75, -40);
1968
- * cizallarX(ratónX / 100);
1969
- * cuadrado(0, 0, 80);
1970
- * };
1971
- */
1972
- function cizallarX(angulo: number): void;
1973
-
1974
- /** 🦋
1975
- * Cizalla el contexto de dibujo a lo largo del eje y.
1976
- * @param {number} angulo ángulo de cizallamiento en radianes
1977
- * @example
1978
- * q5.dibujar = function () {
1979
- * fondo(0.8);
1980
- *
1981
- * trasladar(-75, -40);
1982
- * cizallarY(ratónX / 100);
1983
- * cuadrado(0, 0, 80);
1984
- * };
1985
- */
1986
- function cizallarY(angulo: number): void;
1987
-
1988
- /** 🦋
1989
- * Aplica una matriz de transformación.
1990
- *
1991
- * Acepta una matriz de 3x3 como un array o múltiples argumentos.
1992
- *
1993
- * Ten en cuenta que en q5 WebGPU, la matriz de identidad (por defecto)
1994
- * tiene una escala y negativa para voltear el eje y para coincidir con
1995
- * el renderizador Canvas2D.
1996
- * @param {number} a
1997
- * @param {number} b
1998
- * @param {number} c
1999
- * @param {number} d
2000
- * @param {number} e
2001
- * @param {number} f
2002
- * @example
2003
- * q5.dibujar = function () {
2004
- * fondo(0.8);
2005
- *
2006
- * aplicarMatriz(2, -1, 1, -1);
2007
- * círculo(0, 0, 80);
2008
- * };
2009
- */
2010
- function aplicarMatriz(a: number, b: number, c: number, d: number, e: number, f: number): void;
2011
-
2012
- /** 🦋
2013
- * Reinicia la matriz de transformación.
2014
- *
2015
- * q5 ejecuta esta función antes de cada vez que se ejecuta la función `dibujar`,
2016
- * para que las transformaciones no se trasladen al siguiente fotograma.
2017
- * @example
2018
- * await Lienzo(200);
2019
- * fondo(0.8);
2020
- *
2021
- * trasladar(50, 50);
2022
- * círculo(0, 0, 80);
2023
- *
2024
- * reiniciarMatriz();
2025
- * cuadrado(0, 0, 50);
2026
- */
2027
- function reiniciarMatriz(): void;
2028
-
2029
- /** 🦋
2030
- * Guarda la matriz de transformación actual.
2031
- * @example
2032
- * await Lienzo(200);
2033
- * fondo(0.8);
2034
- *
2035
- * guardarMatriz();
2036
- * rotar(CUARTO_PI);
2037
- * elipse(0, 0, 120, 40);
2038
- * recuperarMatriz();
2039
- *
2040
- * elipse(0, 0, 120, 40);
2041
- */
2042
- function guardarMatriz(): void;
2043
-
2044
- /** 🦋
2045
- * Restaura la matriz de transformación guardada previamente.
2046
- * @example
2047
- * await Lienzo(200);
2048
- * fondo(0.8);
2049
- *
2050
- * guardarMatriz();
2051
- * rotar(CUARTO_PI);
2052
- * elipse(0, 0, 120, 40);
2053
- * recuperarMatriz();
2054
- *
2055
- * elipse(0, 0, 120, 40);
2056
- */
2057
- function recuperarMatriz(): void;
2058
-
2059
- /** 🦋
2060
- * Guarda la configuración de estilo de dibujo y transformaciones actuales.
2061
- * @example
2062
- * await Lienzo(200);
2063
- *
2064
- * apilar();
2065
- * relleno('blue');
2066
- * trasladar(50, 50);
2067
- * círculo(0, 0, 80);
2068
- * desapilar();
2069
- *
2070
- * cuadrado(0, 0, 50);
2071
- */
2072
- function apilar(): void;
2073
-
2074
- /** 🦋
2075
- * Restaura la configuración de estilo de dibujo y transformaciones guardadas previamente.
2076
- * @example
2077
- * await Lienzo(200);
2078
- *
2079
- * apilar();
2080
- * relleno('blue');
2081
- * trasladar(50, 50);
2082
- * círculo(0, 0, 80);
2083
- * desapilar();
2084
- *
2085
- * cuadrado(0, 0, 50);
2086
- */
2087
- function desapilar(): void;
2088
-
2089
- function recuperar(): void;
2090
-
2091
- // 💻 visualización
2092
-
2093
- /** 💻
2094
- * Personaliza cómo se presenta tu lienzo.
2095
- * @param {string} modo NORMAL, CENTRO, o MAXIMIZADO
2096
- * @param {string} calidadRenderizado SUAVE o PIXELADO
2097
- * @param {number} escala también se puede dar como una cadena (por ejemplo "x2")
2098
- * @example
2099
- * await Lienzo(50, 25);
2100
- *
2101
- * modoVisualización(CENTRO, PIXELADO, 4);
2102
- *
2103
- * círculo(0, 0, 16);
2104
- */
2105
- function modoVisualización(modo: string, calidadRender: string, escala: string | number): void;
2106
-
2107
- /** 💻
2108
- * Una configuración de `modoVisualización`.
2109
- *
2110
- * El lienzo se escalará para llenar el elemento padre,
2111
- * con bandas negras si es necesario para preservar su relación de aspecto.
2112
- */
2113
- const MAXIMIZADO: 'maxed';
2114
-
2115
- /** 💻
2116
- * Una calidad de renderizado de `modoVisualización`.
2117
- *
2118
- * Se usa escalado suave si el lienzo se escala.
2119
- */
2120
- const SUAVE: 'smooth';
2121
-
2122
- /** 💻
2123
- * Una calidad de renderizado de `modoVisualización`.
2124
- *
2125
- * Los píxeles se renderizan como cuadrados nítidos si el lienzo se escala.
2126
- */
2127
- const PIXELADO: 'pixelated';
2128
-
2129
- /** 💻
2130
- * Habilita o deshabilita el modo de pantalla completa.
2131
- * @param {boolean} [v] booleano indicando si habilitar o deshabilitar el modo de pantalla completa
2132
- */
2133
- function pantallaCompleta(v?: boolean): void;
2134
-
2135
- /** 💻
2136
- * El ancho de la ventana.
2137
- * @example
2138
- * q5.dibujar = function () {
2139
- * fondo(0.8);
2140
- * tamañoTexto(64);
2141
- * alineaciónTexto(CENTRO, CENTRO);
2142
- * texto(anchoVentana, 0, 0);
2143
- * };
2144
- */
2145
- var anchoVentana: number;
2146
-
2147
- /** 💻
2148
- * El alto de la ventana.
2149
- * @example
2150
- * q5.dibujar = function () {
2151
- * fondo(0.8);
2152
- * tamañoTexto(64);
2153
- * alineaciónTexto(CENTRO, CENTRO);
2154
- * texto(altoVentana, 0, 0);
2155
- * };
2156
- */
2157
- var altoVentana: number;
2158
-
2159
- /** 💻
2160
- * El ancho del lienzo.
2161
- * @example
2162
- * await Lienzo(200, 120);
2163
- * círculo(0, 0, ancho);
2164
- */
2165
- var ancho: number;
2166
-
2167
- /** 💻
2168
- * El alto del lienzo.
2169
- * @example
2170
- * await Lienzo(200, 80);
2171
- * círculo(0, 0, alto);
2172
- */
2173
- var alto: number;
2174
-
2175
- /** 💻
2176
- * La mitad del ancho del lienzo.
2177
- * @example
2178
- * await Lienzo(200, 80);
2179
- * círculo(0, 0, medioAncho);
2180
- */
2181
- var medioAncho: number;
2182
-
2183
- /** 💻
2184
- * La mitad del alto del lienzo.
2185
- * @example
2186
- * await Lienzo(200, 80);
2187
- * círculo(0, 0, medioAlto);
2188
- */
2189
- var medioAlto: number;
2190
-
2191
- /** 💻
2192
- * El elemento lienzo asociado con la instancia Q5.
2193
- *
2194
- * Si no se crea un lienzo explícitamente con `crearLienzo()`, pero se define una función q5 como `dibujar` o `alPresionarRatón`, se creará automáticamente un lienzo por defecto de tamaño 200x200.
2195
- */
2196
- var lienzo: HTMLCanvasElement;
2197
-
2198
- /** 💻
2199
- * Redimensiona el lienzo al ancho y alto especificados.
2200
- * @param {number} w ancho del lienzo
2201
- * @param {number} h alto del lienzo
2202
- * @example
2203
- * await Lienzo(200, 100);
2204
- *
2205
- * q5.dibujar = function () {
2206
- * fondo(0.8);
2207
- * };
2208
- *
2209
- * q5.alPresionarRatón = function () {
2210
- * redimensionarLienzo(200, 200);
2211
- * };
2212
- */
2213
- function redimensionarLienzo(w: number, h: number): void;
2214
-
2215
- /** 💻
2216
- * El número de cuadros que se han mostrado desde que comenzó el programa.
2217
- * @example
2218
- * q5.dibujar = function () {
2219
- * fondo(0.8);
2220
- * tamañoTexto(64);
2221
- * texto(cuadroActual, -92, 20);
2222
- * };
2223
- */
2224
- var cuadroActual: number;
2225
-
2226
- /** 💻
2227
- * Detiene el bucle de dibujo.
2228
- * @example
2229
- * q5.dibujar = function () {
2230
- * círculo(cuadroActual * 5 - 100, 0, 80);
2231
- * pausar();
2232
- * };
2233
- */
2234
- function pausar(): void;
2235
-
2236
- /** 💻
2237
- * Redibuja el lienzo n veces. Si no se proporciona ningún parámetro de entrada,
2238
- * llama a la función de dibujo una vez.
2239
- *
2240
- * Esta es una función asíncrona.
2241
- * @param {number} [n] número de veces para redibujar el lienzo, por defecto es 1
2242
- * @example
2243
- * await Lienzo(200);
2244
- * pausar();
2245
- *
2246
- * q5.dibujar = function () {
2247
- * círculo(cuadroActual * 5 - 100, 0, 80);
2248
- * };
2249
- * q5.alPresionarRatón = function () {
2250
- * redibujar(10);
2251
- * };
2252
- */
2253
- function redibujar(n?: number): void;
2254
-
2255
- /** 💻
2256
- * Inicia el bucle de dibujo de nuevo si estaba detenido.
2257
- * @example
2258
- * await Lienzo(200);
2259
- * pausar();
2260
- *
2261
- * q5.dibujar = function () {
2262
- * círculo(cuadroActual * 5 - 100, 0, 80);
2263
- * };
2264
- * q5.alPresionarRatón = function () {
2265
- * reanudar();
2266
- * };
2267
- */
2268
- function reanudar(): void;
2269
-
2270
- /** 💻
2271
- * Establece la frecuencia de fotogramas objetivo u obtiene una aproximación de la
2272
- * frecuencia de fotogramas actual del sketch.
2273
- *
2274
- * Incluso cuando el sketch se está ejecutando a una frecuencia de fotogramas consistente,
2275
- * el valor actual de la frecuencia de fotogramas fluctuará. Usa las herramientas de desarrollador
2276
- * de tu navegador web para un análisis de rendimiento más preciso.
2277
- * @param {number} [hertz] frecuencia de fotogramas objetivo, por defecto es 60
2278
- * @returns {number} frecuencia de fotogramas actual
2279
- * @example
2280
- * q5.dibujar = function () {
2281
- * fondo(0.8);
2282
- *
2283
- * if (ratónPresionado) frecuenciaRefresco(10);
2284
- * else frecuenciaRefresco(60);
2285
- *
2286
- * círculo((cuadroActual % 200) - 100, 0, 80);
2287
- * };
2288
- * @example
2289
- * q5.dibujar = function () {
2290
- * fondo(0.8);
2291
- * tamañoTexto(64);
2292
- * texto(redondear(frecuenciaRefresco()), -35, 20);
2293
- * };
2294
- */
2295
- function frecuenciaRefresco(hertz?: number): number;
2296
-
2297
- /** 💻
2298
- * La frecuencia de fotogramas deseada del sketch.
2299
- * @returns {number} frecuencia de fotogramas objetivo
2300
- * @example
2301
- * q5.dibujar = function () {
2302
- * fondo(0.8);
2303
- * tamañoTexto(64);
2304
- *
2305
- * texto(obtenerTasaFotogramasObjetivo(), -35, 20);
2306
- * };
2307
- */
2308
- function obtenerTasaFotogramasObjetivo(): number;
2309
-
2310
- /** 💻
2311
- * Obtiene los FPS actuales, en términos de cuántos fotogramas podrían generarse
2312
- * en un segundo, lo cual puede ser más alto que la frecuencia de fotogramas objetivo.
2313
- *
2314
- * Usa las herramientas de desarrollador de tu navegador web para un análisis
2315
- * de rendimiento más profundo.
2316
- * @returns {number} fotogramas por segundo
2317
- * @example
2318
- * q5.dibujar = function () {
2319
- * fondo(0.8);
2320
- * frecuenciaRefresco(1);
2321
- * tamañoTexto(64);
2322
- *
2323
- * texto(obtenerFPS(), -92, 20);
2324
- * };
2325
- */
2326
- function obtenerFPS(): number;
2327
-
2328
- /** 💻
2329
- * Se ejecuta después de cada llamada a la función `dibujar` y procesos de addons de q5 post-dibujo, si los hay.
2330
- *
2331
- * Útil para añadir efectos de post-procesamiento cuando no es posible
2332
- * hacerlo al final de la función `dibujar`, como cuando se usan
2333
- * addons como p5play que auto-dibujan al lienzo después de que
2334
- * la función `dibujar` se ejecuta.
2335
- */
2336
- function postProcesar(): void;
2337
-
2338
- /** 💻
2339
- * Establece la densidad de píxeles del lienzo.
2340
- * @param {number} v valor de densidad de píxeles
2341
- * @returns {number} densidad de píxeles
2342
- * @example
2343
- * await Lienzo(200, 100);
2344
- * fondo(0.8);
2345
- * densidadPíxeles(1);
2346
- * círculo(0, 0, 80);
2347
- */
2348
- function densidadPíxeles(v: number): number;
2349
-
2350
- /** 💻
2351
- * Devuelve la densidad de visualización actual.
2352
- *
2353
- * En la mayoría de pantallas modernas, este valor será 2 o 3.
2354
- * @returns {number} densidad de visualización
2355
- * @example
2356
- * await Lienzo(200, 100);
2357
- * fondo(0.8);
2358
- * tamañoTexto(64);
2359
- * texto(densidadVisualización(), -90, 6);
2360
- */
2361
- function densidadVisualización(): number;
2362
-
2363
- /** 💻
2364
- * El tiempo pasado desde que se dibujó el último fotograma.
2365
- *
2366
- * Con la frecuencia de fotogramas por defecto de 60, el tiempo delta será
2367
- * aproximadamente 16.6
2368
- *
2369
- * Se puede usar para mantener movimientos atados al tiempo real si el sketch
2370
- * a menudo cae por debajo de la frecuencia de fotogramas objetivo. Aunque si las frecuencias
2371
- * de fotogramas son consistentemente bajas, considera reducir la frecuencia
2372
- * de fotogramas objetivo.
2373
- * @example
2374
- * q5.dibujar = function () {
2375
- * fondo(0.8);
2376
- * texto(deltaTiempo, -90, 6);
2377
- * };
2378
- * @example
2379
- * let x = -100;
2380
- * q5.dibujar = function () {
2381
- * fondo(0.8);
2382
- * // simular caídas de frecuencia de fotogramas
2383
- * frecuenciaRefresco(aleatorio(30, 60));
2384
- *
2385
- * x += deltaTiempo * 0.2;
2386
- * if (x > 100) x = -100;
2387
- * círculo(x, 0, 20);
2388
- * };
2389
- */
2390
- var deltaTiempo: number;
2391
-
2392
- /** 💻
2393
- * El contexto de renderizado 2D para el lienzo, si se usa el renderizador
2394
- * Canvas2D.
2395
- */
2396
- var contextoDibujo: CanvasRenderingContext2D;
2397
-
2398
- // 🧮 matemáticas
2399
-
2400
- /** 🧮
2401
- * Genera un valor aleatorio.
2402
- *
2403
- * - Si no se proporcionan entradas, devuelve un número entre 0 y 1.
2404
- * - Si se proporciona una entrada numérica, devuelve un número entre 0 y el valor proporcionado.
2405
- * - Si se proporcionan dos entradas numéricas, devuelve un número entre los dos valores.
2406
- * - Si se proporciona un array, devuelve un elemento aleatorio del array.
2407
- * @param {number | any[]} [bajo] límite inferior (inclusivo) o un array
2408
- * @param {number} [alto] límite superior (exclusivo)
2409
- * @returns {number | any} un número o elemento aleatorio
2410
- * @example
2411
- * await Lienzo(200);
2412
- * fondo(0.8);
2413
- * frecuenciaRefresco(5);
2414
- *
2415
- * q5.dibujar = function () {
2416
- * círculo(0, 0, aleatorio(200));
2417
- * };
2418
- * @example
2419
- * q5.dibujar = function () {
2420
- * círculo(aleatorio(-100, 100), aleatorio(-100, 100), 10);
2421
- * };
2422
- */
2423
- function aleatorio(bajo?: number | any[], alto?: number): number | any;
2424
-
2425
- /** 🧮
2426
- * Genera un número aleatorio dentro de un rango simétrico alrededor de cero.
2427
- *
2428
- * Se puede usar para crear un efecto de fluctuación (desplazamiento aleatorio).
2429
- *
2430
- * Equivalente a `aleatorio(-cantidad, cantidad)`.
2431
- * @param {number} cantidad cantidad máxima absoluta de fluctuación, por defecto es 1
2432
- * @returns {number} número aleatorio entre -val y val
2433
- * @example
2434
- * q5.dibujar = function () {
2435
- * círculo(ratónX + flu(3), ratónY + flu(3), 5);
2436
- * };
2437
- * @example
2438
- * await Lienzo(200);
2439
- *
2440
- * q5.dibujar = function () {
2441
- * círculo(flu(50), 0, aleatorio(50));
2442
- * };
2443
- */
2444
- function flu(cantidad: number): number;
2445
-
2446
- /** 🧮
2447
- * Genera un valor de ruido basado en las entradas x, y, y z.
2448
- *
2449
- * Usa [Ruido Perlin](https://es.wikipedia.org/wiki/Ruido_Perlin) por defecto.
2450
- * @param {number} [x] entrada coordenada-x
2451
- * @param {number} [y] entrada coordenada-y
2452
- * @param {number} [z] entrada coordenada-z
2453
- * @returns {number} un valor de ruido
2454
- * @example
2455
- * q5.dibujar = function () {
2456
- * fondo(0.8);
2457
- * let n = ruido(frameCount * 0.01);
2458
- * círculo(0, 0, n * 200);
2459
- * };
2460
- * @example
2461
- * q5.dibujar = function () {
2462
- * fondo(0.8);
2463
- * let t = (frameCount + ratónX) * 0.02;
2464
- * for (let x = -5; x < 220; x += 10) {
2465
- * let n = ruido(t, x * 0.1);
2466
- * círculo(x - 100, 0, n * 40);
2467
- * }
2468
- * };
2469
- * @example
2470
- * q5.dibujar = function () {
2471
- * sinTrazo();
2472
- * let t = millis() * 0.002;
2473
- * for (let x = -100; x < 100; x += 5) {
2474
- * for (let y = -100; y < 100; y += 5) {
2475
- * relleno(ruido(t, (ratónX + x) * 0.05, y * 0.05));
2476
- * cuadrado(x, y, 5);
2477
- * }
2478
- * }
2479
- * };
2480
- */
2481
- function ruido(x?: number, y?: number, z?: number): number;
2482
-
2483
- /** 🧮
2484
- * Calcula la distancia entre dos puntos.
2485
- *
2486
- * Esta función también acepta dos objetos con propiedades `x` e `y`.
2487
- * @param {number} x1 coordenada-x del primer punto
2488
- * @param {number} y1 coordenada-y del primer punto
2489
- * @param {number} x2 coordenada-x del segundo punto
2490
- * @param {number} y2 coordenada-y del segundo punto
2491
- * @returns {number} distancia entre los puntos
2492
- * @example
2493
- * q5.dibujar = function () {
2494
- * fondo(0.8);
2495
- * línea(0, 0, ratónX, ratónY);
2496
- *
2497
- * let d = dist(0, 0, ratónX, ratónY);
2498
- * texto(redondear(d), -80, -80);
2499
- * };
2500
- */
2501
- function dist(x1: number, y1: number, x2: number, y2: number): number;
2502
-
2503
- /** 🧮
2504
- * Mapea un número de un rango a otro.
2505
- * @param {number} val valor entrante a convertir
2506
- * @param {number} inicio1 límite inferior del rango actual del valor
2507
- * @param {number} fin1 límite superior del rango actual del valor
2508
- * @param {number} inicio2 límite inferior del rango objetivo del valor
2509
- * @param {number} fin2 límite superior del rango objetivo del valor
2510
- * @returns {number} valor mapeado
2511
- */
2512
- function mapa(val: number, inicio1: number, fin1: number, inicio2: number, fin2: number): number;
2513
-
2514
- /** 🧮
2515
- * Establece el modo para interpretar y dibujar ángulos. Puede ser 'degrees' (grados) o 'radians' (radianes).
2516
- * @param {'degrees' | 'radians'} modo modo a establecer para la interpretación de ángulos
2517
- */
2518
- function modoÁngulo(modo: 'degrees' | 'radians'): void;
2519
-
2520
- /** 🧮
2521
- * Convierte grados a radianes.
2522
- * @param {number} grados ángulo en grados
2523
- * @returns {number} ángulo en radianes
2524
- */
2525
- function radianes(grados: number): number;
2526
-
2527
- /** 🧮
2528
- * Convierte radianes a grados.
2529
- * @param {number} radianes ángulo en radianes
2530
- * @returns {number} ángulo en grados
2531
- */
2532
- function grados(radianes: number): number;
2533
-
2534
- /** 🧮
2535
- * Calcula un número entre dos números en un incremento específico.
2536
- * @param {number} inicio primer número
2537
- * @param {number} fin segundo número
2538
- * @param {number} cant cantidad a interpolar entre los dos valores
2539
- * @returns {number} número interpolado
2540
- */
2541
- function interpolar(inicio: number, fin: number, cant: number): number;
2542
-
2543
- /** 🧮
2544
- * Restringe un valor entre un valor mínimo y máximo.
2545
- * @param {number} n número a restringir
2546
- * @param {number} bajo límite inferior
2547
- * @param {number} alto límite superior
2548
- * @returns {number} valor restringido
2549
- */
2550
- function constreñir(n: number, bajo: number, alto: number): number;
2551
-
2552
- /** 🧮
2553
- * Normaliza un número de otro rango en un valor entre 0 y 1.
2554
- * @param {number} n número a normalizar
2555
- * @param {number} inicio límite inferior del rango
2556
- * @param {number} fin límite superior del rango
2557
- * @returns {number} número normalizado
2558
- */
2559
- function norm(n: number, inicio: number, fin: number): number;
2560
-
2561
- /** 🧮
2562
- * Calcula la parte fraccionaria de un número.
2563
- * @param {number} n un número
2564
- * @returns {number} parte fraccionaria del número
2565
- */
2566
- function frac(n: number): number;
2567
-
2568
- /** 🧮
2569
- * Calcula el valor absoluto de un número.
2570
- * @param {number} n un número
2571
- * @returns {number} valor absoluto del número
2572
- */
2573
- function abs(n: number): number;
2574
-
2575
- /** 🧮
2576
- * Redondea un número.
2577
- * @param {number} n número a redondear
2578
- * @param {number} [d] número de lugares decimales a redondear
2579
- * @returns {number} número redondeado
2580
- * @example
2581
- * await Lienzo(200, 100);
2582
- * fondo(0.8);
2583
- * tamañoTexto(32);
2584
- * texto(redondear(PI, 5), -90, 10);
2585
- */
2586
- function redondear(n: number, d: number): number;
2587
-
2588
- /** 🧮
2589
- * Redondea un número hacia arriba.
2590
- * @param {number} n un número
2591
- * @returns {number} número redondeado
2592
- * @example
2593
- * await Lienzo(200, 100);
2594
- * fondo(0.8);
2595
- * tamañoTexto(32);
2596
- * texto(techo(PI), -90, 10);
2597
- */
2598
- function techo(n: number): number;
2599
-
2600
- /** 🧮
2601
- * Redondea un número hacia abajo.
2602
- * @param {number} n un número
2603
- * @returns {number} número redondeado
2604
- * @example
2605
- * await Lienzo(200, 100);
2606
- * fondo(0.8);
2607
- * tamañoTexto(32);
2608
- * texto(piso(-PI), -90, 10);
2609
- */
2610
- function piso(n: number): number;
2611
-
2612
- /** 🧮
2613
- * Devuelve el valor más pequeño en una secuencia de números.
2614
- * @param {...number} args números a comparar
2615
- * @returns {number} mínimo
2616
- * @example
2617
- * q5.dibujar = function () {
2618
- * fondo(min(-ratónX / 100, 0.5));
2619
- * círculo(min(ratónX, 0), 0, 80);
2620
- * };
2621
- */
2622
- function min(...args: number[]): number;
2623
-
2624
- /** 🧮
2625
- * Devuelve el valor más grande en una secuencia de números.
2626
- * @param {...number} args números a comparar
2627
- * @returns {number} máximo
2628
- * @example
2629
- * q5.dibujar = function () {
2630
- * fondo(max(-ratónX / 100, 0.5));
2631
- * círculo(max(ratónX, 0), 0, 80);
2632
- * };
2633
- */
2634
- function max(...args: number[]): number;
2635
-
2636
- /** 🧮
2637
- * Calcula el valor de una base elevada a una potencia.
2638
- *
2639
- * Por ejemplo, `pot(2, 3)` calcula 2 _ 2 _ 2 que es 8.
2640
- * @param {number} base base
2641
- * @param {number} exponente exponente
2642
- * @returns {number} base elevada a la potencia del exponente
2643
- */
2644
- function pot(base: number, exponente: number): number;
2645
-
2646
- /** 🧮
2647
- * Calcula el cuadrado de un número.
2648
- * @param {number} n número a elevar al cuadrado
2649
- * @returns {number} cuadrado del número
2650
- */
2651
- function cuad(n: number): number;
2652
-
2653
- /** 🧮
2654
- * Calcula la raíz cuadrada de un número.
2655
- * @param {number} n un número
2656
- * @returns {number} raíz cuadrada del número
2657
- */
2658
- function raiz(n: number): number;
2659
-
2660
- /** 🧮
2661
- * Calcula el logaritmo natural (base e) de un número.
2662
- * @param {number} n un número
2663
- * @returns {number} logaritmo natural del número
2664
- */
2665
- function loge(n: number): number;
2666
-
2667
- /** 🧮
2668
- * Calcula e elevado a la potencia de un número.
2669
- * @param {number} exponente potencia a la que elevar e
2670
- * @returns {number} e elevado a la potencia del exponente
2671
- */
2672
- function exp(exponente: number): number;
2673
-
2674
- /** 🧮
2675
- * Establece la semilla para el generador de números aleatorios.
2676
- * @param {number} semilla valor de la semilla
2677
- */
2678
- function semillaAleatoria(semilla: number): void;
2679
-
2680
- /** 🧮
2681
- * Establece el método de generación de números aleatorios.
2682
- * @param {any} metodo método a usar para la generación de números aleatorios
2683
- */
2684
- function generadorAleatorio(metodo: any): void;
2685
-
2686
- /** 🧮
2687
- * Genera un número aleatorio siguiendo una distribución Gaussiana (normal).
2688
- * @param {number} media media (centro) de la distribución
2689
- * @param {number} std desviación estándar (dispersión o "ancho") de la distribución
2690
- * @returns {number} un número aleatorio siguiendo una distribución Gaussiana
2691
- */
2692
- function aleatorioGaussiano(media: number, std: number): number;
2693
-
2694
- /** 🧮
2695
- * Genera un número aleatorio siguiendo una distribución exponencial.
2696
- * @returns {number} un número aleatorio siguiendo una distribución exponencial
2697
- */
2698
- function aleatorioExponencial(): number;
2699
-
2700
- /** 🧮
2701
- * Establece el modo de generación de ruido.
2702
- *
2703
- * Solo el modo por defecto, "perlin", está incluido en q5.js. El uso de los
2704
- * otros modos requiere el módulo q5-noiser.
2705
- * @param {'perlin' | 'simplex' | 'blocky'} modo modo de generación de ruido
2706
- */
2707
- function modoRuido(modo: 'perlin' | 'simplex' | 'blocky'): void;
2708
-
2709
- /** 🧮
2710
- * Establece el valor de la semilla para la generación de ruido.
2711
- * @param {number} semilla valor de la semilla
2712
- */
2713
- function semillaRuido(semilla: number): void;
2714
-
2715
- /** 🧮
2716
- * Establece el nivel de detalle para la generación de ruido.
2717
- * @param {number} lod nivel de detalle (número de octavas)
2718
- * @param {number} caida tasa de caída para cada octava
2719
- */
2720
- function detalleRuido(lod: number, caida: number): void;
2721
-
2722
- /** 🧮
2723
- * La relación de la circunferencia de un círculo a su diámetro.
2724
- * Aproximadamente 3.14159.
2725
- */
2726
- const DOS_PI: number;
2727
-
2728
- /** 🧮
2729
- * 2 \* PI.
2730
- * Aproximadamente 6.28319.
2731
- */
2732
- const DOS_PI: number;
2733
-
2734
- /** 🧮
2735
- * 2 \* PI.
2736
- * Aproximadamente 6.28319.
2737
- */
2738
- function TAU(): void;
2739
-
2740
- /** 🧮
2741
- * Mitad de PI.
2742
- * Aproximadamente 1.5708.
2743
- */
2744
- const MEDIO_PI: number;
2745
-
2746
- /** 🧮
2747
- * Un cuarto de PI.
2748
- * Aproximadamente 0.7854.
2749
- */
2750
- const CUARTO_PI: number;
2751
-
2752
- // 🔊 sonido
2753
-
2754
- /**
2755
- * q5 incluye reproducción de sonido de baja latencia y capacidades básicas de mezcla
2756
- * impulsadas por WebAudio.
2757
- *
2758
- * Para filtrado de audio, síntesis y análisis, considera usar el
2759
- * addon [p5.sound](https://p5js.org/reference/p5.sound/) con q5.
2760
- */
2761
-
2762
- /** 🔊
2763
- * Carga datos de audio desde un archivo y devuelve un objeto `Sonido`.
2764
- *
2765
- * Usa funciones como `reproducir`, `pausar`, y `detener` para
2766
- * controlar la reproducción. ¡Ten en cuenta que los sonidos solo pueden reproducirse después de la
2767
- * primera interacción del usuario con la página!
2768
- *
2769
- * Establece `volumen` a un valor entre 0 (silencio) y 1 (volumen completo).
2770
- * Establece `pan` a un valor entre -1 (izquierda) y 1 (derecha) para ajustar
2771
- * la posición estéreo del sonido. Establece `bucle` a true para repetir el sonido.
2772
- *
2773
- * Usa `cargado`, `pausado`, y `terminado` para comprobar el estado del sonido.
2774
- *
2775
- * 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.
2776
- * @param {string} url archivo de sonido
2777
- * @returns {Sonido & PromiseLike<Sonido>} sonido
2778
- * @example
2779
- * await Lienzo(200);
2780
- *
2781
- * let sonido = cargarSonido('/assets/jump.wav');
2782
- * sonido.volumen = 0.3;
2783
- *
2784
- * q5.alPresionarRatón = function () {
2785
- * sonido.reproducir();
2786
- * };
2787
- */
2788
- function cargarSonido(url: string): Sonido & PromiseLike<Sonido>;
2789
-
2790
- /** 🔊
2791
- * Carga datos de audio desde un archivo y devuelve un [HTMLAudioElement](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement).
2792
- *
2793
- * El audio se considera cargado cuando se dispara el [evento canplaythrough](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/canplaythrough_event).
2794
- *
2795
- * ¡Ten en cuenta que el audio solo puede reproducirse después de la primera interacción
2796
- * del usuario con la página!
2797
- * @param url archivo de audio
2798
- * @returns {HTMLAudioElement & PromiseLike<HTMLAudioElement>} un HTMLAudioElement
2799
- * @example
2800
- * await Lienzo(200);
2801
- *
2802
- * let audio = cargarAudio('/assets/retro.flac');
2803
- * audio.volume = 0.4;
2804
- *
2805
- * q5.alPresionarRatón = function () {
2806
- * audio.play();
2807
- * };
2808
- */
2809
- function cargarAudio(url: string): HTMLAudioElement & PromiseLike<HTMLAudioElement>;
2810
-
2811
- /** 🔊
2812
- * Devuelve el AudioContext en uso o undefined si no existe.
2813
- * @returns {AudioContext} instancia de AudioContext
2814
- */
2815
- function obtenerContextoAudio(): AudioContext | void;
2816
-
2817
- /** 🔊
2818
- * Crea un nuevo AudioContext o lo reanuda si estaba suspendido.
2819
- * @returns {Promise<void>} una promesa que se resuelve cuando el AudioContext se reanuda
2820
- */
2821
- function iniciarAudioUsuario(): Promise<void>;
2822
-
2823
- class Sonido {
2824
-
2825
- /** 🔊
2826
- * Crea un nuevo objeto `Q5.Sonido`.
2827
- */
2828
- constructor();
2829
-
2830
- /** 🔊
2831
- * Establece el volumen del sonido a un valor entre
2832
- * 0 (silencio) y 1 (volumen completo).
2833
- */
2834
- volumen: number;
2835
-
2836
- /** 🔊
2837
- * Establece la posición estéreo del sonido entre -1 (izquierda) y 1 (derecha).
2838
- */
2839
- pan: number;
2840
-
2841
- /** 🔊
2842
- * Establece a true para hacer que el sonido se repita continuamente.
2843
- */
2844
- bucle: boolean;
2845
-
2846
- /** 🔊
2847
- * Verdadero si los datos de sonido han terminado de cargarse.
2848
- */
2849
- cargado: boolean;
2850
-
2851
- /** 🔊
2852
- * Verdadero si el sonido está actualmente pausado.
2853
- */
2854
- pausado: boolean;
2855
-
2856
- /** 🔊
2857
- * Verdadero si el sonido ha terminado de reproducirse.
2858
- */
2859
- terminado: boolean;
2860
-
2861
- /** 🔊
2862
- * Reproduce el sonido.
2863
- *
2864
- * Si esta función se ejecuta cuando el sonido ya se está reproduciendo,
2865
- * comenzará una nueva reproducción, causando un efecto de capas.
2866
- *
2867
- * Si esta función se ejecuta cuando el sonido está pausado,
2868
- * todas las instancias de reproducción se reanudarán.
2869
- *
2870
- * Usa `await` para esperar a que el sonido termine de reproducirse.
2871
- * @returns {Promise<void>} una promesa que se resuelve cuando el sonido termina de reproducirse
2872
- */
2873
- reproducir(): void;
2874
-
2875
- /** 🔊
2876
- * Pausa el sonido, permitiendo que sea reanudado.
2877
- */
2878
- pausar(): void;
2879
-
2880
- /** 🔊
2881
- * Detiene el sonido, reiniciando su posición de reproducción
2882
- * al principio.
2883
- *
2884
- * Elimina todas las instancias de reproducción.
2885
- */
2886
- detener(): void;
2887
- }
2888
-
2889
- // 📑 dom
2890
-
2891
- /**
2892
- * El Modelo de Objetos del Documento (DOM) es una interfaz para
2893
- * crear y editar páginas web con JavaScript.
2894
- */
2895
-
2896
- /** 📑
2897
- * Crea un nuevo elemento HTML y lo añade a la página. `createEl` es
2898
- * un alias.
2899
- *
2900
- * Modifica el [`style`](https://developer.mozilla.org/docs/Web/API/HTMLElement/style) CSS del elemento para cambiar su apariencia.
2901
- *
2902
- * Usa [`addEventListener`](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener) para responder a eventos como:
2903
- *
2904
- * - "click": cuando se hace clic en el elemento
2905
- * - "mouseover": cuando el ratón pasa sobre el elemento
2906
- * - "mouseout": cuando el ratón deja de pasar sobre el elemento
2907
- * - "input": cuando el valor de un elemento de formulario cambia
2908
- *
2909
- * q5 añade alguna funcionalidad extra a los elementos que crea:
2910
- *
2911
- * - la función `position` facilita colocar el elemento
2912
- * relativo al lienzo
2913
- * - la función `size` establece el ancho y alto del elemento
2914
- * - alternativamente, usa las propiedades `x`, `y`, `width`, y `height` del elemento
2915
- * @param {string} etiqueta nombre de la etiqueta del elemento
2916
- * @param {string} [contenido] contenido del elemento
2917
- * @returns {HTMLElement} elemento
2918
- * @example
2919
- * await Lienzo(200);
2920
- *
2921
- * let el = crearElemento('div', '*');
2922
- * el.position(50, 50);
2923
- * el.size(100, 100);
2924
- * el.style.fontSize = '136px';
2925
- * el.style.textAlign = 'center';
2926
- * el.style.backgroundColor = 'blue';
2927
- * el.style.color = 'white';
2928
- */
2929
- function crearElemento(etiqueta: string, contenido?: string): HTMLElement;
2930
-
2931
- /** 📑
2932
- * Crea un elemento de enlace.
2933
- * @param {string} href url
2934
- * @param {string} [texto] contenido de texto
2935
- * @param {boolean} [nuevaPestaña] si abrir el enlace en una nueva pestaña
2936
- * @example
2937
- * await Lienzo(200);
2938
- *
2939
- * let enlace = crearA('https://q5js.org', 'q5.js');
2940
- * enlace.position(16, 42);
2941
- * enlace.style.fontSize = '80px';
2942
- *
2943
- * enlace.addEventListener('mouseover', () => {
2944
- * fondo('cyan');
2945
- * });
2946
- */
2947
- function crearA(href: string, texto?: string): HTMLAnchorElement;
2948
-
2949
- /** 📑
2950
- * Crea un elemento de botón.
2951
- * @param {string} [contenido] contenido de texto
2952
- * @example
2953
- * await Lienzo(200, 100);
2954
- *
2955
- * let btn = crearBotón('¡Clic aqui!');
2956
- *
2957
- * btn.addEventListener('click', () => {
2958
- * fondo(aleatorio(0.4, 1));
2959
- * });
2960
- */
2961
- function crearBotón(contenido?: string): HTMLButtonElement;
2962
-
2963
- /** 📑
2964
- * Crea un elemento de casilla de verificación (checkbox).
2965
- *
2966
- * Usa la propiedad `checked` para obtener o establecer el estado de la casilla.
2967
- *
2968
- * La propiedad `label` es el elemento de etiqueta de texto junto a la casilla.
2969
- * @param {string} [etiqueta] etiqueta de texto colocada junto a la casilla
2970
- * @param {boolean} [marcado] estado inicial
2971
- * @example
2972
- * await Lienzo(200, 100);
2973
- *
2974
- * let casilla = crearCasilla('¡Marca aquí!');
2975
- * casilla.label.style.color = 'lime';
2976
- *
2977
- * casilla.addEventListener('input', () => {
2978
- * if (casilla.checked) fondo('lime');
2979
- * else fondo('black');
2980
- * });
2981
- */
2982
- function crearCasilla(etiqueta?: string, marcado?: boolean): HTMLInputElement;
2983
-
2984
- /** 📑
2985
- * Crea un elemento de entrada de color.
2986
- *
2987
- * Usa la propiedad `value` para obtener o establecer el valor del color.
2988
- * @param {string} [valor] valor de color inicial
2989
- * @example
2990
- * await Lienzo(200, 100);
2991
- *
2992
- * let selección = crearSelectorColor();
2993
- * selección.value = '#fd7575';
2994
- *
2995
- * q5.dibujar = function () {
2996
- * fondo(selección.value);
2997
- * };
2998
- */
2999
- function crearSelectorColor(valor?: string): HTMLInputElement;
3000
-
3001
- /** 📑
3002
- * Crea un elemento de imagen.
3003
- * @param {string} src url de la imagen
3004
- * @example
3005
- * await Lienzo(200, 100);
3006
- *
3007
- * let img = crearImg('/assets/p5play_logo.webp');
3008
- * img.position(0, 0).size(100, 100);
3009
- */
3010
- function crearImg(src: string): HTMLImageElement;
3011
-
3012
- /** 📑
3013
- * Crea un elemento de entrada (input).
3014
- *
3015
- * Usa la propiedad `value` para obtener o establecer el valor de la entrada.
3016
- *
3017
- * Usa la propiedad `placeholder` para establecer el texto de etiqueta que aparece
3018
- * dentro de la entrada cuando está vacía.
3019
- *
3020
- * 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.
3021
- * @param {string} [valor] valor inicial
3022
- * @param {string} [tipo] tipo de entrada de texto, puede ser 'text', 'password', 'email', 'number', 'range', 'search', 'tel', 'url'
3023
- * @example
3024
- * await Lienzo(200, 100);
3025
- * tamañoTexto(64);
3026
- *
3027
- * let entrada = crearEntrada();
3028
- * entrada.placeholder = '¡Teclea aquí!';
3029
- * entrada.size(200, 32);
3030
- *
3031
- * entrada.addEventListener('input', () => {
3032
- * fondo('orange');
3033
- * texto(entrada.value, -90, 30);
3034
- * });
3035
- */
3036
- function crearEntrada(valor?: string, tipo?: string): HTMLInputElement;
3037
-
3038
- /** 📑
3039
- * Crea un elemento de párrafo.
3040
- * @param {string} [contenido] contenido de texto
3041
- * @example
3042
- * await Lienzo(200, 50);
3043
- * fondo('coral');
3044
- *
3045
- * let p = crearP('¡Hola, mundo!');
3046
- * p.style.color = 'pink';
3047
- */
3048
- function crearP(contenido?: string): HTMLParagraphElement;
3049
-
3050
- /** 📑
3051
- * Crea un grupo de botones de radio.
3052
- *
3053
- * Usa la función `option(etiqueta, valor)` para añadir nuevos botones de radio
3054
- * al grupo.
3055
- *
3056
- * Usa la propiedad `value` para obtener o establecer el valor del botón de radio seleccionado.
3057
- * @param {string} [nombreGrupo]
3058
- * @example
3059
- * await Lienzo(200, 160);
3060
- *
3061
- * let radio = crearOpciónes();
3062
- * radio.option('cuadrado', '1').option('círculo', '2');
3063
- *
3064
- * q5.dibujar = function () {
3065
- * fondo(0.8);
3066
- * if (radio.value == '1') cuadrado(-40, -40, 80);
3067
- * if (radio.value == '2') círculo(0, 0, 80);
3068
- * };
3069
- */
3070
- function crearOpciónes(nombreGrupo?: string): HTMLDivElement;
3071
-
3072
- /** 📑
3073
- * Crea un elemento de selección (select).
3074
- *
3075
- * Usa la función `option(etiqueta, valor)` para añadir nuevas opciones al
3076
- * elemento de selección.
3077
- *
3078
- * Establece `multiple` a `true` para permitir seleccionar múltiples opciones.
3079
- *
3080
- * Usa la propiedad `value` para obtener o establecer el valor de la opción seleccionada.
3081
- *
3082
- * Usa la propiedad `selected` para obtener las etiquetas de las opciones
3083
- * seleccionadas o establecer las opciones seleccionadas por etiqueta. Puede ser una sola
3084
- * cadena o un array de cadenas.
3085
- * @param {string} [placeholder] texto opcional que aparece antes de que se seleccione una opción
3086
- * @example
3087
- * await Lienzo(200, 100);
3088
- *
3089
- * let sel = crearSelección('Seleccionar un opcion');
3090
- * sel.option('Red', '#f55').option('Green', '#5f5');
3091
- *
3092
- * sel.addEventListener('change', () => {
3093
- * fondo(sel.value);
3094
- * });
3095
- */
3096
- function crearSelección(placeholder?: string): HTMLSelectElement;
3097
-
3098
- /** 📑
3099
- * Crea un elemento deslizador (slider).
3100
- *
3101
- * Usa la propiedad `value` para obtener o establecer el valor del deslizador.
3102
- *
3103
- * Usa la función `val` para obtener el valor del deslizador como un número.
3104
- * @param {number} min valor mínimo
3105
- * @param {number} max valor máximo
3106
- * @param {number} [valor] valor inicial
3107
- * @param {number} [paso] tamaño del paso
3108
- * @example
3109
- * await Lienzo(200);
3110
- *
3111
- * let deslizador = crearDeslizador(0, 1, 0.5, 0.1);
3112
- * deslizador.position(10, 10).size(180);
3113
- *
3114
- * q5.dibujar = function () {
3115
- * fondo(deslizador.val());
3116
- * };
3117
- */
3118
- function crearDeslizador(min: number, max: number, valor?: number, paso?: number): HTMLInputElement;
3119
-
3120
- /** 📑
3121
- * Crea un elemento de video.
3122
- *
3123
- * Ten en cuenta que los videos deben estar silenciados para reproducirse automáticamente y las funciones `play` y
3124
- * `pause` solo pueden ejecutarse después de una interacción del usuario.
3125
- *
3126
- * El elemento de video puede ocultarse y su contenido puede
3127
- * mostrarse en el lienzo usando la función `imagen`.
3128
- * @param {string} src url del video
3129
- * @returns {HTMLVideoElement & PromiseLike<HTMLVideoElement>} un nuevo elemento de video
3130
- * @example
3131
- * await Lienzo(1);
3132
- *
3133
- * let vid = crearVideo('/assets/apollo4.mp4');
3134
- * vid.size(200, 150);
3135
- * vid.autoplay = vid.muted = vid.loop = true;
3136
- * vid.controls = true;
3137
- * @example
3138
- * await Lienzo(200, 150);
3139
- * let vid = crearVideo('/assets/apollo4.mp4');
3140
- * vid.hide();
3141
- *
3142
- * q5.alPresionarRatón = function () {
3143
- * vid.currentTime = 0;
3144
- * vid.play();
3145
- * };
3146
- * q5.dibujar = function () {
3147
- * imagen(vid, -100, -75, 200, 150);
3148
- * // filtro(HUE_ROTATE, 90);
3149
- * };
3150
- */
3151
- function crearVideo(src: string): HTMLVideoElement & PromiseLike<HTMLVideoElement>;
3152
-
3153
- /** 📑
3154
- * Crea una captura desde una cámara conectada, como una webcam.
3155
- *
3156
- * El elemento de video de captura puede ocultarse y su contenido puede
3157
- * mostrarse en el lienzo usando la función `imagen`.
3158
- *
3159
- * Puede precargarse para asegurar que la captura esté lista para usar cuando tu
3160
- * sketch comience.
3161
- *
3162
- * Solicita la resolución de video más alta de la cámara frontal del usuario
3163
- * por defecto. El primer parámetro de esta función se puede usar para
3164
- * especificar las restricciones para la captura. Mira [`getUserMedia`](https://developer.mozilla.org/docs/Web/API/MediaDevices/getUserMedia)
3165
- * para más información.
3166
- * @param {string} [tipo] tipo de captura, puede ser solo `VIDEO` o solo `AUDIO`, el defecto es usar ambos video y audio
3167
- * @param {boolean} [volteado] si reflejar el video verticalmente, true por defecto
3168
- * @returns {HTMLVideoElement & PromiseLike<HTMLVideoElement>} un nuevo elemento de video
3169
- * @example
3170
- * q5.alPresionarRatón = function () {
3171
- * let cap = crearCaptura(VIDEO);
3172
- * cap.size(200, 112.5);
3173
- * canvas.remove();
3174
- * };
3175
- * @example
3176
- * let cap;
3177
- * q5.alPresionarRatón = function () {
3178
- * cap = crearCaptura(VIDEO);
3179
- * cap.hide();
3180
- * };
3181
- *
3182
- * q5.dibujar = function () {
3183
- * let y = (frameCount % 200) - 100;
3184
- * imagen(cap, -100, y, 200, 200);
3185
- * };
3186
- * @example
3187
- * q5.alPresionarRatón = function () {
3188
- * let cap = crearCaptura({
3189
- * video: { width: 640, height: 480 }
3190
- * });
3191
- * cap.size(200, 150);
3192
- * canvas.remove();
3193
- * };
3194
- */
3195
- function crearCaptura(tipo?: string, volteado?: boolean): HTMLVideoElement & PromiseLike<HTMLVideoElement>;
3196
-
3197
- /** 📑
3198
- * 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.
3199
- * @param {string} selector
3200
- * @returns {HTMLElement} elemento
3201
- */
3202
- function encontrarElemento(selector: string): HTMLElement;
3203
-
3204
- /** 📑
3205
- * 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.
3206
- * @param {string} selector
3207
- * @returns {HTMLElement[]} elementos
3208
- */
3209
- function encontrarElementos(selector: string): HTMLElement[];
3210
-
3211
- // 🎞 grabación
3212
-
3213
- /** 🎞
3214
- * Crea una grabadora. ¡Simplemente presiona grabar para empezar a grabar!
3215
- *
3216
- * Las siguientes propiedades se pueden establecer a través de la UI de la grabadora o
3217
- * programáticamente.
3218
- *
3219
- * - `format` se establece a "H.264" por defecto.
3220
- * - `bitrate` es un número en megabits por segundo (mbps). Su valor por defecto
3221
- * está determinado por la altura del lienzo. Aumentar la
3222
- * tasa de bits aumentará la calidad y el tamaño del archivo de la grabación.
3223
- * - `captureAudio` se establece a true por defecto. Establecer a false para deshabilitar
3224
- * la grabación de audio.
3225
- *
3226
- * Ten en cuenta que las grabaciones se hacen a una tasa de fotogramas variable (VFR), lo que
3227
- * hace que el video de salida sea incompatible con algún software de edición.
3228
- * Para más información, mira la página wiki
3229
- * ["Recording the Canvas"](https://github.com/q5js/q5.js/wiki/Recording-the-Canvas).
3230
- * @returns {HTMLElement} una grabadora, elemento DOM de q5
3231
- * @example
3232
- * await Lienzo(200);
3233
- *
3234
- * let grab = crearGrabadora();
3235
- * grab.bitrate = 10;
3236
- *
3237
- * q5.dibujar = function () {
3238
- * círculo(ratónX, flu(medioAlto), 10);
3239
- * };
3240
- */
3241
- function crearGrabadora(): HTMLElement;
3242
-
3243
- /** 🎞
3244
- * Comienza a grabar el lienzo o reanuda la grabación si estaba pausada.
3245
- *
3246
- * Si no existe grabadora, se crea una pero no se muestra.
3247
- */
3248
- function grabar(): void;
3249
-
3250
- /** 🎞
3251
- * Pausa la grabación del lienzo, si hay una en progreso.
3252
- */
3253
- function pausarGrabación(): void;
3254
-
3255
- /** 🎞
3256
- * Descarta la grabación actual.
3257
- */
3258
- function borrarGrabación(): void;
3259
-
3260
- /** 🎞
3261
- * Guarda la grabación actual como un archivo de video.
3262
- * @param {string} nombreArchivo
3263
- * @example
3264
- * q5.dibujar = function () {
3265
- * cuadrado(ratónX, flu(100), 10);
3266
- * };
3267
- *
3268
- * q5.alPresionarRatón = function () {
3269
- * if (!grabando) grabar();
3270
- * else guardarGrabación('squares');
3271
- * };
3272
- */
3273
- function guardarGrabación(nombreArchivo: string): void;
3274
-
3275
- /** 🎞
3276
- * Verdadero si el lienzo está siendo grabado actualmente.
3277
- */
3278
- var grabando: boolean;
3279
-
3280
- // 🛠 utilidades
3281
-
3282
- /** 🛠
3283
- * Carga un archivo o múltiples archivos.
3284
- *
3285
- * El tipo de archivo se determina por la extensión del archivo. q5 soporta cargar
3286
- * archivos de texto, json, csv, fuente, audio, e imagen.
3287
- *
3288
- * Por defecto, los recursos se cargan en paralelo antes de que q5 ejecute `dibujar`. Usa `await` para esperar a que los recursos se carguen.
3289
- * @param {...string} urls
3290
- * @returns {Promise<any[]>} una promesa que se resuelve con objetos
3291
- * @example
3292
- * await Lienzo(200);
3293
- *
3294
- * let logo = cargar('/q5js_logo.avif');
3295
- *
3296
- * q5.dibujar = function () {
3297
- * imagen(logo, -100, -100, 200, 200);
3298
- * };
3299
- * @example
3300
- * await Lienzo(200);
3301
- * fondo(0.8);
3302
- *
3303
- * await cargar('/assets/Robotica.ttf');
3304
- *
3305
- * tamañoTexto(28);
3306
- * texto('Hello, world!', -97, 100);
3307
- * @example
3308
- * await Lienzo(200);
3309
- *
3310
- * let [salto, retro] = await cargar('/assets/jump.wav', '/assets/retro.flac');
3311
- *
3312
- * q5.alPresionarRatón = function () {
3313
- * botónRatón == 'left' ? salto.reproducir() : retro.reproducir();
3314
- * };
3315
- * @example
3316
- * await Lienzo(200);
3317
- * fondo(0.8);
3318
- * tamañoTexto(32);
3319
- *
3320
- * let miXML = await cargar('/assets/animals.xml');
3321
- * let mamiferos = miXML.getElementsByTagName('mammal');
3322
- * let y = -100;
3323
- * for (let mamifero of mamiferos) {
3324
- * texto(mamifero.textContent, -100, (y += 32));
3325
- * }
3326
- */
3327
- function cargar(...urls: string[]): PromiseLike<any[]>;
3328
-
3329
- /** 🛠
3330
- * Guarda datos en un archivo.
3331
- *
3332
- * Si no se especifican datos, se guardará el lienzo.
3333
- *
3334
- * Si no se proporcionan argumentos, el lienzo se guardará como
3335
- * un archivo de imagen llamado "untitled.png".
3336
- * @param {object} [datos] lienzo, imagen, u objeto JS
3337
- * @param {string} [nombreArchivo] nombre de archivo para guardar como
3338
- * @example
3339
- * await Lienzo(200);
3340
- * fondo(0.8);
3341
- * círculo(0, 0, 50);
3342
- *
3343
- * q5.alPresionarRatón = function () {
3344
- * guardar('circle.png');
3345
- * };
3346
- * @example
3347
- * await Lienzo(200);
3348
- * fondo(0.8);
3349
- * texto('save me?', -90, 0);
3350
- * tamañoTexto(180);
3351
- * let rayo = crearImagenTexto('⚡️');
3352
- *
3353
- * q5.alPresionarRatón = function () {
3354
- * guardar(rayo, 'bolt.png');
3355
- * };
3356
- */
3357
- function guardar(datos?: object, nombreArchivo?: string): void;
3358
-
3359
- /** 🛠
3360
- * Carga un archivo de texto desde la url especificada.
3361
- *
3362
- * Se recomienda usar `await` para obtener el texto cargado como una cadena.
3363
- * @param {string} url archivo de texto
3364
- * @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
3365
- */
3366
- function cargarTexto(url: string): object & PromiseLike<string>;
3367
-
3368
- /** 🛠
3369
- * Carga un archivo JSON desde la url especificada.
3370
- *
3371
- * Se recomienda usar `await` para obtener el objeto o array JSON cargado.
3372
- * @param {string} url archivo JSON
3373
- * @returns {any & PromiseLike<any>} un objeto o array conteniendo el JSON cargado
3374
- */
3375
- function cargarJSON(url: string): any & PromiseLike<any>;
3376
-
3377
- /** 🛠
3378
- * Carga un archivo CSV desde la url especificada.
3379
- *
3380
- * Se recomienda usar `await` para obtener el CSV cargado como un array de objetos.
3381
- * @param {string} url archivo CSV
3382
- * @returns {object[] & PromiseLike<object[]>} un array de objetos conteniendo el CSV cargado
3383
- */
3384
- function cargarCSV(url: string): object[] & PromiseLike<object[]>;
3385
-
3386
- /** 🛠
3387
- * Carga un archivo xml desde la url especificada.
3388
- *
3389
- * Se recomienda usar `await` para obtener el Elemento XML cargado.
3390
- * @param {string} url archivo xml
3391
- * @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
3392
- * @example
3393
- * await Lienzo(200);
3394
- * fondo(200);
3395
- * tamañoTexto(32);
3396
- *
3397
- * let animales = await cargarXML('/assets/animals.xml');
3398
- *
3399
- * let mamiferos = animales.getElementsByTagName('mammal');
3400
- * let y = 64;
3401
- * for (let mamifero of mamiferos) {
3402
- * texto(mamifero.textContent, 20, (y += 32));
3403
- * }
3404
- */
3405
- function cargarXML(url: string): object & PromiseLike<Element>;
3406
-
3407
- /** 🛠
3408
- * 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.
3409
- * @returns {PromiseLike<any[]>} una promesa que se resuelve con objetos cargados
3410
- */
3411
- function cargarTodo(): PromiseLike<any[]>;
3412
-
3413
- /** 🛠
3414
- * 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.
3415
- */
3416
- function deshabilitarPrecarga(): void;
3417
-
3418
- /** 🛠
3419
- * nf es la abreviatura de formato de número. Formatea un número
3420
- * a una cadena con un número especificado de dígitos.
3421
- * @param {number} num número a formatear
3422
- * @param {number} digitos número de dígitos a formatear
3423
- * @returns {string} número formateado
3424
- * @example
3425
- * await Lienzo(200, 100);
3426
- * fondo(0.8);
3427
- *
3428
- * tamañoTexto(32);
3429
- * texto(nf(PI, 4, 5), -90, 10);
3430
- */
3431
- function nf(num: number, digitos: number): string;
3432
-
3433
- /** 🛠
3434
- * Baraja los elementos de un array.
3435
- * @param {any[]} arr array a barajar
3436
- * @param {boolean} [modificar] si modificar el array original, falso por defecto lo cual copia el array antes de barajar
3437
- * @returns {any[]} array barajado
3438
- */
3439
- function barajar(arr: any[]): any[];
3440
-
3441
- /** 🛠
3442
- * Almacena un ítem en localStorage.
3443
- * @param {string} clave clave bajo la cual almacenar el ítem
3444
- * @param {string} val valor a almacenar
3445
- */
3446
- function guardarItem(clave: string, val: string): void;
3447
-
3448
- /** 🛠
3449
- * Recupera un ítem de localStorage.
3450
- * @param {string} clave clave del ítem a recuperar
3451
- * @returns {string} valor del ítem recuperado
3452
- */
3453
- function obtenerItem(clave: string): string;
3454
-
3455
- /** 🛠
3456
- * Elimina un ítem de localStorage.
3457
- * @param {string} clave clave del ítem a eliminar
3458
- */
3459
- function eliminarItem(clave: string): void;
3460
-
3461
- /** 🛠
3462
- * Limpia todos los ítems de localStorage.
3463
- */
3464
- function limpiarAlmacenamiento(): void;
3465
-
3466
- /** 🛠
3467
- * Devuelve el año actual.
3468
- * @returns {number} año actual
3469
- */
3470
- function año(): number;
3471
-
3472
- /** 🛠
3473
- * Devuelve el día actual del mes.
3474
- * @returns {number} día actual
3475
- */
3476
- function día(): number;
3477
-
3478
- /** 🛠
3479
- * Devuelve la hora actual.
3480
- * @returns {number} hora actual
3481
- */
3482
- function hora(): number;
3483
-
3484
- /** 🛠
3485
- * Devuelve el minuto actual.
3486
- * @returns {number} minuto actual
3487
- */
3488
- function minuto(): number;
3489
-
3490
- /** 🛠
3491
- * Devuelve el segundo actual.
3492
- * @returns {number} segundo actual
3493
- */
3494
- function segundo(): number;
3495
-
3496
- // ↗ vector
3497
-
3498
- /** ↗
3499
- * Crea un nuevo objeto Vector.
3500
- * @param {number} [x] componente x del vector
3501
- * @param {number} [y] componente y del vector
3502
- * @param {number} [z] componente z del vector
3503
- * @param {number} [w] componente w del vector
3504
- * @returns {Vector} nuevo objeto Vector
3505
- * @example
3506
- * await Lienzo(200);
3507
- * fondo(0.8);
3508
- *
3509
- * let v = crearVector(0, 0);
3510
- * círculo(v.x, v.y, 50);
3511
- */
3512
- function crearVector(): void;
3513
-
3514
- class Vector {
3515
-
3516
- /** ↗
3517
- * 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()`.
3518
- */
3519
- constructor(x: number, y: number, z?: number);
3520
-
3521
- /** ↗
3522
- * El componente x del vector.
3523
- */
3524
- x: number;
3525
-
3526
- /** ↗
3527
- * El componente y del vector.
3528
- */
3529
- y: number;
3530
-
3531
- /** ↗
3532
- * El componente z del vector.
3533
- */
3534
- z: number;
3535
-
3536
- /** ↗
3537
- * El componente w del vector.
3538
- */
3539
- w(): void;
3540
-
3541
- /** ↗
3542
- * Establece los componentes x, y, y z del vector.
3543
- * @param {number} [x] componente x del vector
3544
- * @param {number} [y] componente y del vector
3545
- * @param {number} [z] componente z del vector
3546
- * @param {number} [w] componente w del vector
3547
- * @returns {Vector} este vector
3548
- */
3549
- set(): void;
3550
-
3551
- /** ↗
3552
- * Devuelve una copia del vector.
3553
- * @returns {Vector} copia del vector
3554
- */
3555
- copy(): void;
3556
-
3557
- /** ↗
3558
- * Suma x, y, y z componentes a un vector, suma un vector a otro, o suma dos vectores independientes.
3559
- * @param {number | Vector} x componente x del vector o Vector a sumar
3560
- * @param {number} [y] componente y del vector
3561
- * @param {number} [z] componente z del vector
3562
- * @returns {Vector} este vector
3563
- */
3564
- add(): void;
3565
-
3566
- /** ↗
3567
- * Resta x, y, y z componentes de un vector, resta un vector de otro, o resta dos vectores independientes.
3568
- * @param {number | Vector} x componente x del vector o Vector a restar
3569
- * @param {number} [y] componente y del vector
3570
- * @param {number} [z] componente z del vector
3571
- * @returns {Vector} este vector
3572
- */
3573
- sub(): void;
3574
-
3575
- /** ↗
3576
- * Multiplica el vector por un escalar.
3577
- * @param {number} n escalar por el cual multiplicar
3578
- * @returns {Vector} este vector
3579
- */
3580
- mult(n: number | Vector): Vector;
3581
-
3582
- /** ↗
3583
- * Divide el vector por un escalar.
3584
- * @param {number} n escalar por el cual dividir
3585
- * @returns {Vector} este vector
3586
- */
3587
- div(n: number | Vector): Vector;
3588
-
3589
- /** ↗
3590
- * Calcula la magnitud (longitud) del vector y devuelve el resultado como un flotante (esto es simplemente la ecuación `sqrt(x*x + y*y + z*z)`).
3591
- * @returns {number} magnitud del vector
3592
- */
3593
- mag(): number;
3594
-
3595
- /** ↗
3596
- * Calcula la magnitud (longitud) del vector al cuadrado y devuelve el resultado como un flotante (esto es simplemente la ecuación `x*x + y*y + z*z`).
3597
- * @returns {number} magnitud del vector al cuadrado
3598
- */
3599
- magSq(): void;
3600
-
3601
- /** ↗
3602
- * Calcula el producto punto de dos vectores.
3603
- * @param {Vector} v vector con el cual hacer producto punto
3604
- * @returns {number} producto punto
3605
- */
3606
- dot(): void;
3607
-
3608
- /** ↗
3609
- * Calcula el producto cruz de dos vectores.
3610
- * @param {Vector} v vector con el cual hacer producto cruz
3611
- * @returns {Vector} producto cruz
3612
- */
3613
- cross(): void;
3614
-
3615
- /** ↗
3616
- * Calcula la distancia euclidiana entre dos puntos (considerando un punto como un objeto vector).
3617
- * @param {Vector} v vector al cual calcular distancia
3618
- * @returns {number} distancia
3619
- */
3620
- dist(v: Vector): number;
3621
-
3622
- /** ↗
3623
- * Normaliza el vector a longitud 1 (hace que sea un vector unitario).
3624
- * @returns {Vector} este vector
3625
- */
3626
- normalize(): void;
3627
-
3628
- /** ↗
3629
- * Limita la magnitud de este vector al valor usado para el parámetro `max`.
3630
- * @param {number} max magnitud máxima
3631
- * @returns {Vector} este vector
3632
- */
3633
- limit(): void;
3634
-
3635
- /** ↗
3636
- * Establece la magnitud de este vector al valor usado para el parámetro `len`.
3637
- * @param {number} len nueva longitud para este vector
3638
- * @returns {Vector} este vector
3639
- */
3640
- setMag(): void;
3641
-
3642
- /** ↗
3643
- * Calcula el ángulo de rotación para este vector (solo vectores 2D).
3644
- * @returns {number} el ángulo de rotación
3645
- */
3646
- heading(): void;
3647
-
3648
- /** ↗
3649
- * Rota el vector por un ángulo (solo vectores 2D), la magnitud permanece igual.
3650
- * @param {number} ángulo ángulo de rotación
3651
- * @returns {Vector} este vector
3652
- */
3653
- rotate(): void;
3654
-
3655
- /** ↗
3656
- * Calcula y devuelve el ángulo entre dos vectores.
3657
- * @param {Vector} v el vector x, y, z
3658
- * @returns {number} el ángulo entre
3659
- */
3660
- angleBetween(): void;
3661
-
3662
- /** ↗
3663
- * Interpola linealmente el vector a otro vector.
3664
- * @param {Vector} v el vector x, y, z
3665
- * @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
3666
- * @returns {Vector} este vector
3667
- */
3668
- lerp(v: Vector, amt: number): Vector;
3669
-
3670
- /** ↗
3671
- * Refleja el vector entrante sobre una normal al muro.
3672
- * @param {Vector} superficieNormal el vector normal a la superficie
3673
- * @returns {Vector} este vector
3674
- */
3675
- reflect(): void;
3676
-
3677
- /** ↗
3678
- * Devuelve una representación de este vector como un array de flotantes.
3679
- * @returns {number[]} array de flotantes
3680
- */
3681
- array(): void;
3682
-
3683
- /** ↗
3684
- * Comprueba si los componentes x, y, y z del vector son iguales a los componentes x, y, y z de otro vector.
3685
- * @param {Vector} v el vector a comparar
3686
- * @returns {boolean} verdadero si los vectores son iguales
3687
- */
3688
- equals(): void;
3689
-
3690
- /** ↗
3691
- * Hace un nuevo vector 2D desde un ángulo de longitud 1.
3692
- * @param {number} ángulo el ángulo deseado
3693
- * @param {number} [longitud] longitud del nuevo vector (por defecto a 1)
3694
- * @returns {Vector} nuevo objeto Vector
3695
- */
3696
- fromAngle(): void;
3697
-
3698
- /** ↗
3699
- * Hace un nuevo vector 2D aleatorio con una magnitud de 1.
3700
- * @returns {Vector} nuevo objeto Vector
3701
- */
3702
- random2D(): void;
3703
-
3704
- /** ↗
3705
- * Hace un nuevo vector 3D aleatorio con una magnitud de 1.
3706
- * @returns {Vector} nuevo objeto Vector
3707
- */
3708
- random3D(): void;
3709
- sumar(v: Vector): Vector;
3710
-
3711
- restar(v: Vector): Vector;
3712
-
3713
- normalizar(): Vector;
3714
-
3715
- establecerMag(len: number): Vector;
3716
-
3717
- punto(v: Vector): number;
3718
-
3719
- cruz(v: Vector): Vector;
3720
-
3721
- copiar(): Vector;
3722
-
3723
- establecer(x: number, y: number, z?: number): void;
3724
-
3725
- limitar(max: number): Vector;
3726
-
3727
- rumbo(): number;
3728
-
3729
- establecerRumbo(angulo: number): Vector;
3730
-
3731
- rotar(angulo: number): Vector;
3732
-
3733
- slerp(v: Vector, amt: number): Vector;
3734
-
3735
- static desdeÁngulo(angulo: number, longitud?: number): Vector;
3736
-
3737
- }
3738
-
3739
- // 🖌 modelado
3740
-
3741
- /** 🖌
3742
- * Dibuja un arco, que es una sección de una elipse.
3743
- *
3744
- * `modoEliptico` afecta cómo se dibuja el arco.
3745
- *
3746
- * q5 WebGPU solo soporta el modo por defecto `PIE_OPEN`.
3747
- * @param {number} x coordenada-x
3748
- * @param {number} y coordenada-y
3749
- * @param {number} w ancho de la elipse
3750
- * @param {number} h alto de la elipse
3751
- * @param {number} inicio ángulo para empezar el arco
3752
- * @param {number} fin ángulo para terminar el arco
3753
- * @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`
3754
- * @example
3755
- * await Lienzo(200);
3756
- * fondo(0.8);
3757
- *
3758
- * arco(0, 0, 160, 160, 0.8, -0.8);
3759
- */
3760
- function arco(x: number, y: number, w: number, h: number, inicio: number, fin: number, modo?: number): void;
3761
-
3762
- /** 🖌
3763
- * Dibuja una curva.
3764
- * @example
3765
- * await Lienzo(200, 100);
3766
- * fondo(0.8);
3767
- *
3768
- * curva(-100, -200, -50, 0, 50, 0, 100, -200);
3769
- */
3770
- function curva(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): void;
3771
-
3772
- /** 🖌
3773
- * Establece la cantidad de segmentos de línea recta usados para hacer una curva.
3774
- *
3775
- * Solo tiene efecto en q5 WebGPU.
3776
- * @param {number} val nivel de detalle de la curva, por defecto es 20
3777
- * @example
3778
- * await Lienzo(200);
3779
- *
3780
- * detalleCurva(4);
3781
- *
3782
- * grosorTrazo(10);
3783
- * trazo(0, 1, 1);
3784
- * curva(-100, -200, -50, 0, 50, 0, 100, -200);
3785
- */
3786
- function detalleCurva(val: number): void;
3787
-
3788
- /** 🖌
3789
- * Comienza a almacenar vértices para una forma convexa.
3790
- */
3791
- function empezarForma(): void;
3792
-
3793
- /** 🖌
3794
- * Termina de almacenar vértices para una forma convexa.
3795
- */
3796
- function terminarForma(): void;
3797
-
3798
- /** 🖌
3799
- * Comienza a almacenar vértices para un contorno.
3800
- *
3801
- * No disponible en q5 WebGPU.
3802
- */
3803
- function empezarContorno(): void;
3804
-
3805
- /** 🖌
3806
- * Termina de almacenar vértices para un contorno.
3807
- *
3808
- * No disponible en q5 WebGPU.
3809
- */
3810
- function terminarContorno(): void;
3811
-
3812
- /** 🖌
3813
- * Especifica un vértice en una forma.
3814
- * @param {number} x coordenada-x
3815
- * @param {number} y coordenada-y
3816
- */
3817
- function vértice(x: number, y: number): void;
3818
-
3819
- /** 🖌
3820
- * Especifica un vértice Bezier en una forma.
3821
- * @param {number} cp1x coordenada-x del primer punto de control
3822
- * @param {number} cp1y coordenada-y del primer punto de control
3823
- * @param {number} cp2x coordenada-x del segundo punto de control
3824
- * @param {number} cp2y coordenada-y del segundo punto de control
3825
- * @param {number} x coordenada-x del punto de anclaje
3826
- * @param {number} y coordenada-y del punto de anclaje
3827
- */
3828
- function vérticeBezier(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
3829
-
3830
- /** 🖌
3831
- * Especifica un vértice Bezier cuadrático en una forma.
3832
- * @param {number} cp1x coordenada-x del punto de control
3833
- * @param {number} cp1y coordenada-y del punto de control
3834
- * @param {number} x coordenada-x del punto de anclaje
3835
- * @param {number} y coordenada-y del punto de anclaje
3836
- */
3837
- function vérticeCuadrático(cp1x: number, cp1y: number, x: number, y: number): void;
3838
-
3839
- /** 🖌
3840
- * Dibuja una curva Bezier.
3841
- * @param {number} x1 coordenada-x del primer punto de anclaje
3842
- * @param {number} y1 coordenada-y del primer punto de anclaje
3843
- * @param {number} x2 coordenada-x del primer punto de control
3844
- * @param {number} y2 coordenada-y del primer punto de control
3845
- * @param {number} x3 coordenada-x del segundo punto de control
3846
- * @param {number} y3 coordenada-y del segundo punto de control
3847
- * @param {number} x4 coordenada-x del segundo punto de anclaje
3848
- * @param {number} y4 coordenada-y del segundo punto de anclaje
3849
- */
3850
- function bezier(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): void;
3851
-
3852
- /** 🖌
3853
- * Dibuja un triángulo.
3854
- * @param {number} x1 coordenada-x del primer vértice
3855
- * @param {number} y1 coordenada-y del primer vértice
3856
- * @param {number} x2 coordenada-x del segundo vértice
3857
- * @param {number} y2 coordenada-y del segundo vértice
3858
- * @param {number} x3 coordenada-x del tercer vértice
3859
- * @param {number} y3 coordenada-y del tercer vértice
3860
- */
3861
- function triángulo(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number): void;
3862
-
3863
- /** 🖌
3864
- * Dibuja un cuadrilátero.
3865
- * @param {number} x1 coordenada-x del primer vértice
3866
- * @param {number} y1 coordenada-y del primer vértice
3867
- * @param {number} x2 coordenada-x del segundo vértice
3868
- * @param {number} y2 coordenada-y del segundo vértice
3869
- * @param {number} x3 coordenada-x del tercer vértice
3870
- * @param {number} y3 coordenada-y del tercer vértice
3871
- * @param {number} x4 coordenada-x del cuarto vértice
3872
- * @param {number} y4 coordenada-y del cuarto vértice
3873
- */
3874
- function quad(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): void;
3875
-
3876
- // ⚡ sombreadores
3877
-
3878
- /**
3879
- * ¡Shaders personalizados escritos en WGSL (WebGPU Shading Language) pueden ser
3880
- * usados para crear efectos visuales avanzados en q5!
3881
- */
3882
-
3883
- /** ⚡
3884
- * Crea un shader que q5 puede usar para dibujar formas.
3885
- *
3886
- * Afecta a las siguientes funciones:
3887
- * `triángulo`, `quad`, `plano`,
3888
- * `curva`, `bezier`, `empezarForma`/`terminarForma`,
3889
- * y `fondo` (a menos que se use una imagen).
3890
- *
3891
- * Usa esta función para personalizar una copia del
3892
- * [shader de formas por defecto](https://github.com/q5js/q5.js/blob/main/src/shaders/shapes.wgsl).
3893
- *
3894
- * Para más información sobre los parámetros de entrada de las funciones de vértice y fragmento,
3895
- * datos, y funciones auxiliares disponibles para usar
3896
- * en tu código de shader personalizado, lee la página wiki
3897
- * ["Custom Shaders in q5 WebGPU"](https://github.com/q5js/q5.js/wiki/Custom-Shaders-in-q5-WebGPU).
3898
- * @param {string} codigo extracto de código shader WGSL
3899
- * @returns {GPUShaderModule} un programa shader
3900
- * @example
3901
- * await Lienzo(200);
3902
- *
3903
- * let wobble = crearShader(`
3904
- * @vertex
3905
- * fn vertexMain(v: VertexParams) -> FragParams {
3906
- * var vert = transformVertex(v.pos, v.matrixIndex);
3907
- *
3908
- * let i = f32(v.vertexIndex) % 4 * 100;
3909
- * vert.x += cos((q.time + i) * 0.01) * 0.1;
3910
- *
3911
- * var f: FragParams;
3912
- * f.position = vert;
3913
- * f.color = vec4f(1, 0, 0, 1);
3914
- * return f;
3915
- * }`);
3916
- *
3917
- * q5.dibujar = function () {
3918
- * limpiar();
3919
- * shader(wobble);
3920
- * plano(0, 0, 100);
3921
- * };
3922
- * @example
3923
- * await Lienzo(200);
3924
- *
3925
- * let stripes = crearShader(`
3926
- * @fragment
3927
- * fn fragMain(f: FragParams) -> @location(0) vec4f {
3928
- * let r = cos((q.mouseY + f.position.y) * 0.2);
3929
- * return vec4(r, 0.0, 1, 1);
3930
- * }`);
3931
- *
3932
- * q5.dibujar = function () {
3933
- * shader(stripes);
3934
- * triángulo(-50, -50, 0, 50, 50, -50);
3935
- * };
3936
- */
3937
- function crearShader(codigo: string): GPUShaderModule;
3938
-
3939
- /** ⚡
3940
- * Un plano es un rectángulo centrado sin trazo.
3941
- * @param {number} x centro x
3942
- * @param {number} y centro y
3943
- * @param {number} w ancho o longitud del lado
3944
- * @param {number} [h] alto
3945
- * @example
3946
- * await Lienzo(200);
3947
- * plano(0, 0, 100);
3948
- */
3949
- function plano(x: number, y: number, w: number, h?: number): void;
3950
-
3951
- /** ⚡
3952
- * Aplica un shader.
3953
- * @param {GPUShaderModule} moduloShader un programa shader
3954
- */
3955
- function shader(moduloShader: GPUShaderModule): void;
3956
-
3957
- /** ⚡
3958
- * Hace que q5 use el shader de formas por defecto.
3959
- * @example
3960
- * await Lienzo(200);
3961
- *
3962
- * let stripes = crearShader(`
3963
- * @fragment
3964
- * fn fragMain(f: FragParams) -> @location(0) vec4f {
3965
- * let g = cos((q.mouseY + f.position.y) * 0.05);
3966
- * return vec4(1, g, 0, 1);
3967
- * }`);
3968
- *
3969
- * q5.dibujar = function () {
3970
- * shader(stripes);
3971
- * fondo(0);
3972
- *
3973
- * reiniciarShader();
3974
- * triángulo(-50, -50, 0, 50, 50, -50);
3975
- * };
3976
- */
3977
- function reiniciarShader(): void;
3978
-
3979
- /** ⚡
3980
- * Hace que q5 use el shader de fotograma por defecto.
3981
- */
3982
- function reiniciarShaderFotograma(): void;
3983
-
3984
- /** ⚡
3985
- * Hace que q5 use el shader de imagen por defecto.
3986
- */
3987
- function reiniciarShaderImagen(): void;
3988
-
3989
- /** ⚡
3990
- * Hace que q5 use el shader de video por defecto.
3991
- */
3992
- function reiniciarShaderVideo(): void;
3993
-
3994
- /** ⚡
3995
- * Hace que q5 use el shader de texto por defecto.
3996
- */
3997
- function reiniciarShaderTexto(): void;
3998
-
3999
- /** ⚡
4000
- * Hace que q5 use todos los shaders por defecto.
4001
- */
4002
- function reiniciarShaders(): void;
4003
-
4004
- /** ⚡
4005
- * Crea un shader que q5 puede usar para dibujar fotogramas.
4006
- *
4007
- * `crearLienzo` debe ejecutarse antes de usar esta función.
4008
- *
4009
- * Usa esta función para personalizar una copia del
4010
- * [shader de fotograma por defecto](https://github.com/q5js/q5.js/blob/main/src/shaders/frame.wgsl).
4011
- * @example
4012
- * await Lienzo(200);
4013
- *
4014
- * let boxy = crearShaderFotograma(`
4015
- * @fragment
4016
- * fn fragMain(f: FragParams) -> @location(0) vec4f {
4017
- * let x = sin(f.texCoord.y * 4 + q.time * 0.002);
4018
- * let y = cos(f.texCoord.x * 4 + q.time * 0.002);
4019
- * let uv = f.texCoord + vec2f(x, y);
4020
- * return textureSample(tex, samp, uv);
4021
- * }`);
4022
- *
4023
- * q5.dibujar = function () {
4024
- * trazo(1);
4025
- * grosorTrazo(8);
4026
- * línea(ratónX, ratónY, pRatónX, pRatónY);
4027
- * ratónPresionado ? reiniciarShaders() : shader(boxy);
4028
- * };
4029
- */
4030
- function crearShaderFotograma(codigo: string): GPUShaderModule;
4031
-
4032
- /** ⚡
4033
- * Crea un shader que q5 puede usar para dibujar imágenes.
4034
- *
4035
- * Usa esta función para personalizar una copia del
4036
- * [shader de imagen por defecto](https://github.com/q5js/q5.js/blob/main/src/shaders/image.wgsl).
4037
- * @param {string} codigo extracto de código shader WGSL
4038
- * @returns {GPUShaderModule} un programa shader
4039
- * @example
4040
- * await Lienzo(200);
4041
- * modoImagen(CENTER);
4042
- *
4043
- * let logo = cargarImagen('/q5js_logo.avif');
4044
- *
4045
- * let grate = crearShaderImagen(`
4046
- * @fragment
4047
- * fn fragMain(f: FragParams) -> @location(0) vec4f {
4048
- * var texColor = textureSample(tex, samp, f.texCoord);
4049
- * texColor.b += (q.mouseX + f.position.x) % 20 / 10;
4050
- * return texColor;
4051
- * }`);
4052
- *
4053
- * q5.dibujar = function () {
4054
- * fondo(0.7);
4055
- * shader(grate);
4056
- * imagen(logo, 0, 0, 180, 180);
4057
- * };
4058
- */
4059
- function crearShaderImagen(codigo: string): GPUShaderModule;
4060
-
4061
- /** ⚡
4062
- * Crea un shader que q5 puede usar para dibujar fotogramas de video.
4063
- *
4064
- * Usa esta función para personalizar una copia del
4065
- * [shader de video por defecto](https://github.com/q5js/q5.js/blob/main/src/shaders/video.wgsl).
4066
- * @param {string} codigo extracto de código shader WGSL
4067
- * @returns {GPUShaderModule} un programa shader
4068
- * @example
4069
- * await Lienzo(200, 600);
4070
- *
4071
- * let vid = crearVideo('/assets/apollo4.mp4');
4072
- * vid.hide();
4073
- *
4074
- * let flipper = crearShaderVideo(`
4075
- * @vertex
4076
- * fn vertexMain(v: VertexParams) -> FragParams {
4077
- * var vert = transformVertex(v.pos, v.matrixIndex);
4078
- *
4079
- * var vi = f32(v.vertexIndex);
4080
- * vert.y *= cos((q.frameCount + vi * 10) * 0.03);
4081
- *
4082
- * var f: FragParams;
4083
- * f.position = vert;
4084
- * f.texCoord = v.texCoord;
4085
- * return f;
4086
- * }
4087
- *
4088
- * @fragment
4089
- * fn fragMain(f: FragParams) -> @location(0) vec4f {
4090
- * var texColor =
4091
- * textureSampleBaseClampToEdge(tex, samp, f.texCoord);
4092
- * texColor.r = 0;
4093
- * texColor.b *= 2;
4094
- * return texColor;
4095
- * }`);
4096
- *
4097
- * q5.dibujar = function () {
4098
- * limpiar();
4099
- * if (ratónPresionado) vid.play();
4100
- * shader(flipper);
4101
- * imagen(vid, -100, 150, 200, 150);
4102
- * };
4103
- */
4104
- function crearShaderVideo(codigo: string): GPUShaderModule;
4105
-
4106
- /** ⚡
4107
- * Crea un shader que q5 puede usar para dibujar texto.
4108
- *
4109
- * Usa esta función para personalizar una copia del
4110
- * [shader de texto por defecto](https://github.com/q5js/q5.js/blob/main/src/shaders/text.wgsl).
4111
- * @param {string} codigo extracto de código shader WGSL
4112
- * @returns {GPUShaderModule} un programa shader
4113
- * @example
4114
- * await Lienzo(200);
4115
- * alineaciónTexto(CENTER, CENTER);
4116
- *
4117
- * let spin = crearShaderTexto(`
4118
- * @vertex
4119
- * fn vertexMain(v : VertexParams) -> FragParams {
4120
- * let char = textChars[v.instanceIndex];
4121
- * let text = textMetadata[i32(char.w)];
4122
- * let fontChar = fontChars[i32(char.z)];
4123
- * let pos = calcPos(v.vertexIndex, char, fontChar, text);
4124
- *
4125
- * var vert = transformVertex(pos, text.matrixIndex);
4126
- *
4127
- * let i = f32(v.instanceIndex + 1);
4128
- * vert.y *= cos((q.frameCount - 5 * i) * 0.05);
4129
- *
4130
- * var f : FragParams;
4131
- * f.position = vert;
4132
- * f.texCoord = calcUV(v.vertexIndex, fontChar);
4133
- * f.fillColor = colors[i32(text.fillIndex)];
4134
- * f.strokeColor = colors[i32(text.strokeIndex)];
4135
- * f.strokeWeight = text.strokeWeight;
4136
- * f.edge = text.edge;
4137
- * return f;
4138
- * }`);
4139
- *
4140
- * q5.dibujar = function () {
4141
- * limpiar();
4142
- * shader(spin);
4143
- * relleno(1, 0, 1);
4144
- * tamañoTexto(32);
4145
- * texto('Hello, World!', 0, 0);
4146
- * };
4147
- */
4148
- function crearShaderTexto(codigo: string): GPUShaderModule;
4149
-
4150
- // ⚙ avanzado
4151
-
4152
- /** ⚙
4153
- * Alias para `Q5`.
4154
- */
4155
- const q5: typeof Q5;
4156
-
4157
- class Q5 {
4158
-
4159
- /** ⚙
4160
- * Funcion constructora. Crea una instancia de Q5.
4161
- * @param {string | Function} [ambito]
4162
- * @param {HTMLElement} [contenedor] elemento HTML dentro del cual se colocará el lienzo
4163
- */
4164
- constructor(scope?: string | Function, parent?: HTMLElement);
4165
-
4166
- /** ⚙
4167
- * La versión menor actual de q5.
4168
- * @returns {string} la versión de q5
4169
- * @example
4170
- * await Lienzo(200);
4171
- * fondo(0.8);
4172
- * tamañoTexto(64);
4173
- * alineaciónTexto(CENTRO, CENTRO);
4174
- * texto('v' + Q5.version, 0, 0);
4175
- */
4176
- version(): void;
4177
-
4178
- /** ⚙
4179
- * Establece un código de idioma distinto de 'en' (inglés) para usar q5 en otro idioma.
4180
- *
4181
- * Idiomas actualmente soportados:
4182
- *
4183
- * - 'es' (Español)
4184
- */
4185
- static lang: string;
4186
-
4187
- /** ⚙
4188
- * Desactiva los mensajes de error amigables de q5.
4189
- */
4190
- static deshabilitarErroresAmigables: boolean;
4191
-
4192
- /** ⚙
4193
- * Establecer en verdadero para mantener el bucle de dibujo después de un error.
4194
- */
4195
- static toleranteErrores: boolean;
4196
-
4197
- /** ⚙
4198
- * Verdadero si el dispositivo soporta HDR (el espacio de color display-p3).
4199
- */
4200
- static soportaHDR: boolean;
4201
-
4202
- /** ⚙
4203
- * Establece los atributos de contexto de lienzo predeterminados utilizados para
4204
- * lienzos recién creados y gráficos internos. Estas opciones son sobrescritas por
4205
- * cualquier opción por lienzo que pases a `crearLienzo`.
4206
- */
4207
- static opcionesLienzo: object;
4208
-
4209
- /** ⚙
4210
- * Un límite de asignación de memoria WebGPU.
4211
- *
4212
- * El número máximo de matrices de transformación
4213
- * que se pueden usar en una sola llamada de dibujo.
4214
- */
4215
- static MAX_TRANSFORMACIONES: number;
4216
-
4217
- /** ⚙
4218
- * Un límite de asignación de memoria WebGPU.
4219
- *
4220
- * El número máximo de rectángulos
4221
- * (llamadas a `rect`, `cuadrado`, `cápsula`)
4222
- * que se pueden dibujar en una sola llamada de dibujo.
4223
- */
4224
- static MAX_RECTS: number;
4225
-
4226
- /** ⚙
4227
- * Un límite de asignación de memoria WebGPU.
4228
- *
4229
- * El número máximo de elipses
4230
- * (llamadas a `elipse`, `círculo`, y `arco`)
4231
- * que se pueden dibujar en una sola llamada de dibujo.
4232
- */
4233
- static MAX_ELIPSES: number;
4234
-
4235
- /** ⚙
4236
- * Un límite de asignación de memoria WebGPU.
4237
- *
4238
- * El número máximo de caracteres de texto
4239
- * que se pueden dibujar en una sola llamada de dibujo.
4240
- */
4241
- static MAX_CARACTERES: number;
4242
-
4243
- /** ⚙
4244
- * Un límite de asignación de memoria WebGPU.
4245
- *
4246
- * El número máximo de llamadas separadas a `texto`
4247
- * que se pueden dibujar en una sola llamada de dibujo.
4248
- */
4249
- static MAX_TEXTOS: number;
4250
-
4251
- /** ⚙
4252
- * Crea una nueva instancia de Q5 que usa el [renderizador WebGPU de q5](https://github.com/q5js/q5.js/wiki/q5-WebGPU-renderer).
4253
- * @example
4254
- * let q = await Q5.WebGPU('namespace');
4255
- * q.crearLienzo(200, 100);
4256
- *
4257
- * q.dibujar = () => {
4258
- * q.fondo(0.8);
4259
- * q.círculo(q.ratónX, 0, 80);
4260
- * };
4261
- */
4262
- static WebGPU(): Q5;
4263
-
4264
- /** ⚙
4265
- * Los addons pueden aumentar q5 con nueva funcionalidad agregando hooks,
4266
- * funciones que se ejecutan en fases específicas del ciclo de vida de q5.
4267
- *
4268
- * Dentro de la función, `this` se refiere a la instancia de Q5.
4269
- * @param {string} lifecycle 'init', 'presetup', 'postsetup', 'predraw', 'postdraw', o 'remove'
4270
- * @param {Function} fn La función que se ejecutará en la fase del ciclo de vida especificada.
4271
- * @example
4272
- * Q5.addHook('predraw', function () {
4273
- * this.fondo('cyan');
4274
- * });
4275
- *
4276
- * q5.dibujar = function () {
4277
- * círculo(ratónX, ratónY, 80);
4278
- * };
4279
- */
4280
- addHook(): void;
4281
-
4282
- /** ⚙
4283
- * Forma compatible con p5.js v2 de registrar un addon con q5.
4284
- * @param {Function} addon Una función que recibe `Q5`, `Q5.prototype`, y un objeto `lifecycles`.
4285
- * @example
4286
- * // addon.js
4287
- * Q5.registerAddon((Q5, proto, lifecycles) => {
4288
- * lifecycles.predraw = function () {
4289
- * this.fondo('pink');
4290
- * };
4291
- * });
4292
- *
4293
- * // sketch.js
4294
- * await Lienzo(200);
4295
- */
4296
- registerAddon(): void;
4297
-
4298
- /** ⚙
4299
- * Un objeto que contiene los módulos de q5, funciones que se ejecutan cuando q5 carga.
4300
- *
4301
- * Cada función recibe dos parámetros de entrada:
4302
- *
4303
- * - la instancia de q5
4304
- * - un proxy para editar la instancia de q5 y las propiedades correspondientes del ámbito global
4305
- */
4306
- static modulos: object;
4307
-
4308
- /** ⚙
4309
- * La función de dibujo de q5 se ejecuta 60 veces por segundo por defecto.
4310
- */
4311
- dibujar(): void;
4312
-
4313
- /** ⚙
4314
- * Se ejecuta después de cada llamada a la función `dibujar` y procesos de addons de q5 post-dibujo, si los hay.
4315
- *
4316
- * Útil para agregar efectos de post-procesamiento cuando no es posible
4317
- * hacerlo al final de la función `dibujar`, como cuando se usan
4318
- * addons como p5play que dibujan automáticamente al lienzo después de que
4319
- * la función `dibujar` se ejecuta.
4320
- */
4321
- postProcesar(): void;
4322
- static versión: string;
4323
-
4324
- static agregarHook(cicloVida: string, fn: Function): void;
4325
-
4326
- static registrarAddon(addon: Function): void;
4327
-
4328
- actualizar(): void; //-
4329
-
4330
- static Imagen: {
4331
- new (w: number, h: number, opt?: any): Q5.Imagen;
4332
- };
4333
-
4334
- }
4335
-
4336
- namespace Q5 {
4337
- interface Imagen {
4338
- ancho: number;
4339
- alto: number;
4340
- }
4341
- }
4342
-
4343
- }
4344
-
4345
- export {};