@jjlmoya/utils-games-development 1.46.0 → 1.49.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/package.json +1 -1
- package/src/category/index.ts +2 -1
- package/src/entries.ts +8 -1
- package/src/tests/locale_completeness.test.ts +1 -20
- package/src/tests/tool_validation.test.ts +2 -3
- package/src/tool/itchioGameTester/audit.ts +51 -0
- package/src/tool/itchioGameTester/bibliography.astro +6 -0
- package/src/tool/itchioGameTester/bibliography.ts +14 -0
- package/src/tool/itchioGameTester/client.ts +238 -0
- package/src/tool/itchioGameTester/component.astro +97 -0
- package/src/tool/itchioGameTester/entry.ts +28 -0
- package/src/tool/itchioGameTester/i18n/de.ts +107 -0
- package/src/tool/itchioGameTester/i18n/en.ts +164 -0
- package/src/tool/itchioGameTester/i18n/es.ts +172 -0
- package/src/tool/itchioGameTester/i18n/fr.ts +107 -0
- package/src/tool/itchioGameTester/i18n/id.ts +107 -0
- package/src/tool/itchioGameTester/i18n/it.ts +107 -0
- package/src/tool/itchioGameTester/i18n/ja.ts +107 -0
- package/src/tool/itchioGameTester/i18n/ko.ts +107 -0
- package/src/tool/itchioGameTester/i18n/nl.ts +107 -0
- package/src/tool/itchioGameTester/i18n/pl.ts +107 -0
- package/src/tool/itchioGameTester/i18n/pt.ts +107 -0
- package/src/tool/itchioGameTester/i18n/ru.ts +107 -0
- package/src/tool/itchioGameTester/i18n/sv.ts +107 -0
- package/src/tool/itchioGameTester/i18n/tr.ts +107 -0
- package/src/tool/itchioGameTester/i18n/zh.ts +107 -0
- package/src/tool/itchioGameTester/index.ts +11 -0
- package/src/tool/itchioGameTester/itchio-game-tester.css +273 -0
- package/src/tool/itchioGameTester/logic.test.ts +56 -0
- package/src/tool/itchioGameTester/logic.ts +266 -0
- package/src/tool/itchioGameTester/seo.astro +15 -0
- package/src/tool/itchioGameTester/ui.ts +20 -0
- package/src/tool/spriteSheetPacker/app-client.ts +248 -0
- package/src/tool/spriteSheetPacker/bibliography.astro +6 -0
- package/src/tool/spriteSheetPacker/bibliography.ts +12 -0
- package/src/tool/spriteSheetPacker/component.astro +229 -0
- package/src/tool/spriteSheetPacker/dropzone-client.ts +55 -0
- package/src/tool/spriteSheetPacker/entry.ts +28 -0
- package/src/tool/spriteSheetPacker/exporter.ts +116 -0
- package/src/tool/spriteSheetPacker/extractor-client.ts +127 -0
- package/src/tool/spriteSheetPacker/flipbook-client.ts +60 -0
- package/src/tool/spriteSheetPacker/i18n/de.ts +270 -0
- package/src/tool/spriteSheetPacker/i18n/en.ts +275 -0
- package/src/tool/spriteSheetPacker/i18n/es.ts +275 -0
- package/src/tool/spriteSheetPacker/i18n/fr.ts +270 -0
- package/src/tool/spriteSheetPacker/i18n/id.ts +270 -0
- package/src/tool/spriteSheetPacker/i18n/it.ts +270 -0
- package/src/tool/spriteSheetPacker/i18n/ja.ts +270 -0
- package/src/tool/spriteSheetPacker/i18n/ko.ts +270 -0
- package/src/tool/spriteSheetPacker/i18n/nl.ts +270 -0
- package/src/tool/spriteSheetPacker/i18n/pl.ts +270 -0
- package/src/tool/spriteSheetPacker/i18n/pt.ts +270 -0
- package/src/tool/spriteSheetPacker/i18n/ru.ts +266 -0
- package/src/tool/spriteSheetPacker/i18n/sv.ts +270 -0
- package/src/tool/spriteSheetPacker/i18n/tr.ts +270 -0
- package/src/tool/spriteSheetPacker/i18n/zh.ts +270 -0
- package/src/tool/spriteSheetPacker/index.ts +11 -0
- package/src/tool/spriteSheetPacker/logic.test.ts +155 -0
- package/src/tool/spriteSheetPacker/logic.ts +32 -0
- package/src/tool/spriteSheetPacker/packer-core.ts +121 -0
- package/src/tool/spriteSheetPacker/packer-ui.ts +86 -0
- package/src/tool/spriteSheetPacker/seo.astro +15 -0
- package/src/tool/spriteSheetPacker/sprite-sheet-packer.css +542 -0
- package/src/tool/spriteSheetPacker/types.ts +89 -0
- package/src/tool/spriteSheetPacker/ui.ts +42 -0
- package/src/tools.ts +4 -1
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { SpriteSheetPackerUI } from '../ui';
|
|
3
|
+
|
|
4
|
+
export const content: ToolLocaleContent<SpriteSheetPackerUI> = {
|
|
5
|
+
slug: 'empaquetador-y-extractor-de-sprite-sheets',
|
|
6
|
+
title: 'Empaquetador y Extractor de Sprite Sheets',
|
|
7
|
+
description:
|
|
8
|
+
'Optimiza el rendimiento de juegos 2D empaquetando frames de animación sueltos en atlases de texturas o extrayendo sprites individuales de hojas existentes.',
|
|
9
|
+
ui: {
|
|
10
|
+
packerTab: 'Estudio de Empaquetado',
|
|
11
|
+
extractorTab: 'Extractor de Sprites',
|
|
12
|
+
dropZoneTitle: 'Arrastra y Suelta Frames',
|
|
13
|
+
dropZoneSubtitle: 'Sube imágenes PNG o WebP para generar tu atlas de texturas optimizado',
|
|
14
|
+
selectFilesButton: 'Seleccionar Imágenes de Frames',
|
|
15
|
+
clearAllButton: 'Limpiar Espacio de Trabajo',
|
|
16
|
+
downloadZipButton: 'Descargar Paquete (ZIP)',
|
|
17
|
+
copyJsonButton: 'Copiar JSON del Atlas',
|
|
18
|
+
downloadSheetPngButton: 'Descargar Textura PNG',
|
|
19
|
+
paddingLabel: 'Padding de Frame (px)',
|
|
20
|
+
borderExtrusionLabel: 'Extrusión de Borde (px)',
|
|
21
|
+
maxTextureSizeLabel: 'Dimensión Máxima de Textura',
|
|
22
|
+
powerOfTwoLabel: 'Forzar Potencia de 2 (POT)',
|
|
23
|
+
exportFormatLabel: 'Formato del Motor Objetivo',
|
|
24
|
+
presetPixelArt: 'Preset Pixel Art 16x16',
|
|
25
|
+
presetHdUi: 'Preset Atlas HD UI 1024',
|
|
26
|
+
presetMobile: 'Preset Móvil WebGL 2048',
|
|
27
|
+
formatGenericHash: 'JSON Genérico (Hash)',
|
|
28
|
+
formatGenericArray: 'JSON Genérico (Array)',
|
|
29
|
+
formatUnity: 'Motor Unity 2D',
|
|
30
|
+
formatGodot: 'Motor Godot 2D',
|
|
31
|
+
formatPhaser: 'Motor Phaser / PixiJS',
|
|
32
|
+
formatCss: 'CSS Web Frontend',
|
|
33
|
+
previewTitle: 'Previsualización del Atlas de Textura',
|
|
34
|
+
efficiencyBadge: 'Eficiencia de Textura',
|
|
35
|
+
drawCallsBadge: 'Reducción de Draw Calls',
|
|
36
|
+
totalFramesBadge: 'Frames Empaquetados',
|
|
37
|
+
textureSizeBadge: 'Dimensión del Atlas',
|
|
38
|
+
flipbookTitle: 'Reproductor Flipbook de Animación',
|
|
39
|
+
flipbookFpsLabel: 'Velocidad de Animación (FPS)',
|
|
40
|
+
playAnimation: 'Reproducir Secuencia',
|
|
41
|
+
pauseAnimation: 'Pausar Secuencia',
|
|
42
|
+
frameWidthLabel: 'Ancho del Frame (px)',
|
|
43
|
+
frameHeightLabel: 'Alto del Frame (px)',
|
|
44
|
+
marginLabel: 'Desplazamiento de Margen (px)',
|
|
45
|
+
spacingLabel: 'Espaciado de Rejilla (px)',
|
|
46
|
+
extractedCountLabel: 'Sprites Extraídos',
|
|
47
|
+
codeSnippetTitle: 'Código de Integración con el Motor',
|
|
48
|
+
copySnippetButton: 'Copiar Snippet de Código',
|
|
49
|
+
copiedToast: 'Copiado al Portapapeles',
|
|
50
|
+
},
|
|
51
|
+
seo: [
|
|
52
|
+
{
|
|
53
|
+
type: 'title',
|
|
54
|
+
level: 2,
|
|
55
|
+
text: 'Comprensión de Batching GPU y Optimización de Llamadas de Dibujo en Motores 2D',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'paragraph',
|
|
59
|
+
html: 'En pipelines de gráficos 2D modernos, cada archivo de imagen independiente renderizado en pantalla requiere que la CPU envíe un comando conocido como llamada de dibujo o draw call a la GPU. Cuando una animación se compone de docenas de archivos PNG sueltos, la tarjeta gráfica debe cambiar constantemente de textura activa. Empaquetar los frames sueltos en un solo atlas de textura unificado permite agrupar cientos de órdenes de renderizado en un solo lote, eliminando cuellos de botella y acelerando la tasa de fotogramas.',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'stats',
|
|
63
|
+
columns: 4,
|
|
64
|
+
items: [
|
|
65
|
+
{ value: '95%', label: 'Reducción de Draw Calls' },
|
|
66
|
+
{ value: '4x', label: 'Procesamiento GPU Más Rápido' },
|
|
67
|
+
{ value: '60 FPS', label: 'Objetivo Estable en Móviles' },
|
|
68
|
+
{ value: '100%', label: 'Seguridad Local en Navegador' },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'title',
|
|
73
|
+
level: 2,
|
|
74
|
+
text: 'Comparativa entre Archivos de Frames Sueltos y Atlases de Textura Empaquetados',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: 'comparative',
|
|
78
|
+
columns: 2,
|
|
79
|
+
items: [
|
|
80
|
+
{
|
|
81
|
+
title: 'Archivos de Frames de Animación Sueltos',
|
|
82
|
+
description: 'Archivos PNG o WebP independientes almacenados en disco',
|
|
83
|
+
points: [
|
|
84
|
+
'Genera una llamada de dibujo independiente para cada frame mostrado en pantalla',
|
|
85
|
+
'Provoca cambios frecuentes de unidades de textura y fragmentación de VRAM',
|
|
86
|
+
'Aumenta las peticiones de red HTTP y el tiempo de carga en juegos web',
|
|
87
|
+
'Causa caídas de fotogramas en GPUs móviles durante escenas con muchos sprites',
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
title: 'Atlas de Texturas Empaquetado',
|
|
92
|
+
description: 'Hoja PNG unificada combinada con un archivo JSON de coordenadas',
|
|
93
|
+
points: [
|
|
94
|
+
'Agrupa cientos de frames de sprites en una sola llamada de dibujo de GPU',
|
|
95
|
+
'Maximiza el ancho de banda de memoria gráfica y la tasa de renderizado',
|
|
96
|
+
'Empaqueta todos los frames en un solo archivo descargable reduciendo consumo de red',
|
|
97
|
+
'Permite mantener 60 FPS fluidos en dispositivos móviles de gama baja y navegadores',
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
type: 'title',
|
|
104
|
+
level: 2,
|
|
105
|
+
text: 'Matemática del Movimiento Subpíxel y Extrusión de Bordes',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
type: 'paragraph',
|
|
109
|
+
html: 'Al renderizar arte de píxeles o personajes 2D con movimiento de cámara suavizado o filtrado bilinear, los frames adyacentes de un sprite sheet pueden sangrar entre sí en las fronteras de las coordenadas de textura. Este artefacto visual ocurre porque el muestreo de textura interpola los colores de los píxeles vecinos cuando la posición de la cámara cae entre coordenadas enteras de píxeles.',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'tip',
|
|
113
|
+
title: 'Estrategia de Extrusión de Borde para Renderizado Sin Costuras',
|
|
114
|
+
html: 'Para eliminar el sangrado subpíxel durante el movimiento de cámara, aplica de 1 a 2 píxeles de extrusión de borde al empaquetar tu sprite sheet. La extrusión duplica los píxeles de los bordes hacia el área de relleno, asegurando que el filtrado interpola colores idénticos en lugar de transparentes o de frames adyacentes.',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
type: 'title',
|
|
118
|
+
level: 2,
|
|
119
|
+
text: 'Guía de Tamaños de Textura para Motores WebGL y de Escritorio',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: 'paragraph',
|
|
123
|
+
html: 'Seleccionar las dimensiones máximas adecuadas es fundamental para la compatibilidad multiplataforma. Mientras que las GPUs de escritorio manejan fácilmente texturas de 4096x4096px, los controladores WebGL móviles de gama baja imponen límites máximos de 2048x2048px.',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'table',
|
|
127
|
+
headers: ['Plataforma Objetivo', 'Tamaño Máximo Recomendado', 'Potencia de 2 (POT)', 'Perfil de Memoria'],
|
|
128
|
+
rows: [
|
|
129
|
+
['Navegadores Móviles y HTML5', '2048 x 2048 px', 'Obligatorio en WebGL 1.0', 'Ancho de Banda Bajo y Alta Eficiencia'],
|
|
130
|
+
['Motores de PC y Consola', '4096 x 4096 px', 'Recomendado', 'Alta Capacidad GPU y Mipmapping Rápido'],
|
|
131
|
+
['Consolas Retro y Portátiles', '1024 x 1024 px', 'Requisito Estricto de Hardware', 'Límites de VRAM Estrictos'],
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
type: 'title',
|
|
136
|
+
level: 2,
|
|
137
|
+
text: 'Ventajas y Desventajas del Empaquetado en Potencia de 2',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
type: 'proscons',
|
|
141
|
+
items: [
|
|
142
|
+
{
|
|
143
|
+
pro: 'Ofrece el 100% de compatibilidad con controladores móviles antiguos y WebGL 1.0',
|
|
144
|
+
con: 'Puede introducir espacio transparente no utilizado al empaquetar pocos sprites',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
pro: 'Permite la generación automática de mipmaps por hardware para un escalado suave',
|
|
148
|
+
con: 'Aumenta ligeramente el área de superficie de textura inicial',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
pro: 'Optimiza la asignación de memoria VRAM en la tarjeta gráfica',
|
|
152
|
+
con: 'Requiere configurar el padding cuidadosamente para evitar desperdicio',
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
level: 2,
|
|
159
|
+
text: 'Glosario Técnico de Arquitectura de Empaquetado de Sprites',
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'glossary',
|
|
163
|
+
items: [
|
|
164
|
+
{
|
|
165
|
+
term: 'Draw Call',
|
|
166
|
+
definition: 'Comando enviado por la CPU a la GPU indicando que debe renderizar un lote de geometría con textura.',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
term: 'Algoritmo Bin Packing',
|
|
170
|
+
definition: 'Técnica matemática que organiza rectángulos de diferentes tamaños en un contenedor mínimo sin solapamientos.',
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
term: 'Border Extrusion',
|
|
174
|
+
definition: 'Proceso de clonar los píxeles de los bordes hacia el relleno exterior para prevenir costuras visuales.',
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
term: 'Flipbook Animation',
|
|
178
|
+
definition: 'Reproducción rápida secuencial de fotogramas 2D para simular movimiento físico continuo.',
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
type: 'title',
|
|
184
|
+
level: 2,
|
|
185
|
+
text: 'Lista de Verificación y Diagnóstico para Desarrolladores de Juegos',
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
type: 'diagnostic',
|
|
189
|
+
variant: 'info',
|
|
190
|
+
title: 'Reglas de Producción para Desarrollo de Videojuegos',
|
|
191
|
+
html: 'Agrupa animaciones en atlases compartidos por personaje, aplica dimensiones potencia de dos en WebGL, usa 1-2px de extrusión de borde y recorta transparencias sobrantes antes de empaquetar.',
|
|
192
|
+
},
|
|
193
|
+
],
|
|
194
|
+
faq: [
|
|
195
|
+
{
|
|
196
|
+
question: '¿Qué es un sprite sheet y por qué es esencial para juegos 2D?',
|
|
197
|
+
answer:
|
|
198
|
+
'Un sprite sheet es una imagen compuesta que contiene múltiples fotogramas de animación. Al combinar imágenes en una hoja, los motores dibujan muchos objetos en un solo comando de GPU.',
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
question: '¿Cómo funciona el empaquetado en navegador en esta herramienta?',
|
|
202
|
+
answer:
|
|
203
|
+
'Tus imágenes se procesan localmente en la API Canvas HTML5 de tu navegador. El algoritmo calcula coordenadas óptimas y genera la imagen PNG y el JSON de inmediato sin enviar datos fuera de tu equipo.',
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
question: '¿Puedo extraer fotogramas de una hoja de sprites existente?',
|
|
207
|
+
answer:
|
|
208
|
+
'Sí. Cambia al modo Extractor, sube tu hoja de sprites y ajusta las dimensiones de rejilla para cortar y descargar cada imagen individualmente.',
|
|
209
|
+
},
|
|
210
|
+
],
|
|
211
|
+
howTo: [
|
|
212
|
+
{
|
|
213
|
+
name: 'Subir Fotogramas de Animación',
|
|
214
|
+
text: 'Arrastra y suelta tus archivos de fotogramas PNG o WebP en el área de carga.',
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
name: 'Configurar Ajustes de Empaquetado',
|
|
218
|
+
text: 'Ajusta el padding, la extrusión de borde y la dimensión máxima de textura. Selecciona el formato de tu motor como Unity o Godot.',
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
name: 'Previsualizar y Exportar',
|
|
222
|
+
text: 'Prueba la animación en el reproductor flipbook para verificar la alineación y descarga tu paquete comprimido ZIP.',
|
|
223
|
+
},
|
|
224
|
+
],
|
|
225
|
+
schemas: [
|
|
226
|
+
{
|
|
227
|
+
'@context': 'https://schema.org',
|
|
228
|
+
'@type': 'SoftwareApplication',
|
|
229
|
+
name: 'Empaquetador y Extractor de Sprite Sheets',
|
|
230
|
+
applicationCategory: 'DeveloperApplication',
|
|
231
|
+
operatingSystem: 'Any',
|
|
232
|
+
offers: {
|
|
233
|
+
'@type': 'Offer',
|
|
234
|
+
price: '0',
|
|
235
|
+
priceCurrency: 'USD',
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
'@context': 'https://schema.org',
|
|
240
|
+
'@type': 'FAQPage',
|
|
241
|
+
mainEntity: [
|
|
242
|
+
{
|
|
243
|
+
'@type': 'Question',
|
|
244
|
+
name: '¿Qué es un sprite sheet y por qué es esencial para juegos 2D?',
|
|
245
|
+
acceptedAnswer: {
|
|
246
|
+
'@type': 'Answer',
|
|
247
|
+
text: 'Un sprite sheet es una imagen compuesta que contiene múltiples fotogramas de animación que permite dibujar objetos en una sola llamada de GPU.',
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
],
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
'@context': 'https://schema.org',
|
|
254
|
+
'@type': 'HowTo',
|
|
255
|
+
name: 'Cómo Empaquetar y Extraer Sprite Sheets',
|
|
256
|
+
step: [
|
|
257
|
+
{
|
|
258
|
+
'@type': 'HowToStep',
|
|
259
|
+
name: 'Subir Fotogramas de Animación',
|
|
260
|
+
text: 'Arrastra y suelta tus archivos de fotogramas PNG o WebP en el área de carga.',
|
|
261
|
+
},
|
|
262
|
+
],
|
|
263
|
+
},
|
|
264
|
+
],
|
|
265
|
+
bibliography: [
|
|
266
|
+
{
|
|
267
|
+
name: 'Godot Engine 2D Sprite Sheets Documentation',
|
|
268
|
+
url: 'https://docs.godotengine.org/en/stable/tutorials/2d/2d_sprite_animation.html',
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
name: 'Unity Sprite Atlas Manual',
|
|
272
|
+
url: 'https://docs.unity3d.com/Manual/class-SpriteAtlas.html',
|
|
273
|
+
},
|
|
274
|
+
],
|
|
275
|
+
};
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { SpriteSheetPackerUI } from '../ui';
|
|
3
|
+
|
|
4
|
+
export const content: ToolLocaleContent<SpriteSheetPackerUI> = {
|
|
5
|
+
slug: 'empaqueteur-et-extracteur-de-sprite-sheets',
|
|
6
|
+
title: 'Empaqueteur et Extracteur de Sprite Sheets',
|
|
7
|
+
description:
|
|
8
|
+
'Optimisez les performances de vos jeux 2D en regroupant vos images d animation en atlases de textures ou en extrayant des sprites individuels.',
|
|
9
|
+
ui: {
|
|
10
|
+
packerTab: 'Studio d Empaquetage',
|
|
11
|
+
extractorTab: 'Extracteur de Sprites',
|
|
12
|
+
dropZoneTitle: 'Glisser et Déposer vos Images',
|
|
13
|
+
dropZoneSubtitle: 'Téléchargez vos fichiers PNG ou WebP pour générer un atlas de textures optimisé',
|
|
14
|
+
selectFilesButton: 'Sélectionner des Images',
|
|
15
|
+
clearAllButton: 'Vider l Espace de Travail',
|
|
16
|
+
downloadZipButton: 'Télécharger le Paquet (ZIP)',
|
|
17
|
+
copyJsonButton: 'Copier le JSON d Atlas',
|
|
18
|
+
downloadSheetPngButton: 'Télécharger la Texture PNG',
|
|
19
|
+
paddingLabel: 'Espacement entre Frames (px)',
|
|
20
|
+
borderExtrusionLabel: 'Extrusion des Bords (px)',
|
|
21
|
+
maxTextureSizeLabel: 'Dimension Maximale',
|
|
22
|
+
powerOfTwoLabel: 'Forcer la Puissance de 2 (POT)',
|
|
23
|
+
trimTransparencyLabel: 'Rogner la Transparence',
|
|
24
|
+
exportFormatLabel: 'Format du Moteur Cible',
|
|
25
|
+
presetPixelArt: 'Préréglage Pixel Art 16x16',
|
|
26
|
+
presetHdUi: 'Préréglage Atlas HD UI 1024',
|
|
27
|
+
presetMobile: 'Préréglage Mobile WebGL 2048',
|
|
28
|
+
formatGenericHash: 'JSON Générique (Hash)',
|
|
29
|
+
formatGenericArray: 'JSON Générique (Array)',
|
|
30
|
+
formatUnity: 'Moteur Unity 2D',
|
|
31
|
+
formatGodot: 'Moteur Godot 2D',
|
|
32
|
+
formatPhaser: 'Moteur Phaser / PixiJS',
|
|
33
|
+
formatCss: 'CSS Web Frontend',
|
|
34
|
+
previewTitle: 'Aperçu de l Atlas de Texture',
|
|
35
|
+
efficiencyBadge: 'Efficacité de Texture',
|
|
36
|
+
drawCallsBadge: 'Appels de Rendu Réduits',
|
|
37
|
+
totalFramesBadge: 'Frames Empaquetées',
|
|
38
|
+
textureSizeBadge: 'Dimension d Atlas',
|
|
39
|
+
flipbookTitle: 'Lecteur d Animation Flipbook',
|
|
40
|
+
flipbookFpsLabel: 'Vitesse d Animation (FPS)',
|
|
41
|
+
playAnimation: 'Jouer la Séquence',
|
|
42
|
+
pauseAnimation: 'Mettre en Pause',
|
|
43
|
+
extractorModeGrid: 'Découpage par Grille Fixe',
|
|
44
|
+
extractorModeAlpha: 'Découpage Automatique par Canal Alpha',
|
|
45
|
+
frameWidthLabel: 'Largeur de Frame (px)',
|
|
46
|
+
frameHeightLabel: 'Hauteur de Frame (px)',
|
|
47
|
+
marginLabel: 'Marge Extérieure (px)',
|
|
48
|
+
spacingLabel: 'Espacement de Grille (px)',
|
|
49
|
+
extractFramesButton: 'Extraire les Images',
|
|
50
|
+
extractedCountLabel: 'Sprites Extraits',
|
|
51
|
+
codeSnippetTitle: 'Code d Intégration du Moteur',
|
|
52
|
+
copySnippetButton: 'Copier le Code',
|
|
53
|
+
copiedToast: 'Copié dans le Presse-papier',
|
|
54
|
+
},
|
|
55
|
+
seo: [
|
|
56
|
+
{
|
|
57
|
+
type: 'title',
|
|
58
|
+
level: 2,
|
|
59
|
+
text: 'Comprendre le Batching GPU et l Optimisation des Appels de Rendu',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'paragraph',
|
|
63
|
+
html: 'Dans les moteurs de jeu 2D modernes, chaque image affichée nécessite une commande envoyée par le processeur à la carte graphique GPU.',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: 'stats',
|
|
67
|
+
columns: 4,
|
|
68
|
+
items: [
|
|
69
|
+
{ value: '95%', label: 'Réduction des Appels de Rendu' },
|
|
70
|
+
{ value: '4x', label: 'Traitement GPU Plus Rapide' },
|
|
71
|
+
{ value: '60 FPS', label: 'Objectif Stable sur Mobile' },
|
|
72
|
+
{ value: '100%', label: 'Traitement Local Navigateur' },
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
level: 2,
|
|
78
|
+
text: 'Comparaison entre Fichiers Séparés et Atlas de Textures',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'comparative',
|
|
82
|
+
columns: 2,
|
|
83
|
+
items: [
|
|
84
|
+
{
|
|
85
|
+
title: 'Fichiers d Images Séparés',
|
|
86
|
+
description: 'Fichiers PNG ou WebP stockés individuellement',
|
|
87
|
+
points: [
|
|
88
|
+
'Génère un appel de rendu distinct pour chaque frame à l écran',
|
|
89
|
+
'Entraîne des changements de contexte fréquents sur la carte graphique',
|
|
90
|
+
'Augmente le nombre de requêtes HTTP pour les jeux web',
|
|
91
|
+
'Vitesse d affichage réduite sur les appareils mobiles',
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
title: 'Atlas de Texture Empaqueté',
|
|
96
|
+
description: 'Image composite unique liée à un fichier JSON',
|
|
97
|
+
points: [
|
|
98
|
+
'Regroupe des centaines de sprites en un seul appel de rendu GPU',
|
|
99
|
+
'Maximise la bande passante mémoire et le débit de rendu graphique',
|
|
100
|
+
'Réduit les requêtes de fichiers en regroupant image et métadonnées',
|
|
101
|
+
'Garantit une animation fluide sur toutes les plateformes',
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'title',
|
|
108
|
+
level: 2,
|
|
109
|
+
text: 'Mathematiques du Mouvement Subpixel et Extrusion des Bords',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'paragraph',
|
|
113
|
+
html: 'Lors du rendu de sprites avec un mouvement de caméra fluide, les bords des images peuvent bavarder les uns sur les autres.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'tip',
|
|
117
|
+
title: 'Stratégie d Extrusion des Bords',
|
|
118
|
+
html: 'Ajoutez 1 à 2 pixels d extrusion de bord pour éliminer tout artefact lors du mouvement de caméra.',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'title',
|
|
122
|
+
level: 2,
|
|
123
|
+
text: 'Directives de Tailles de Textures pour Mobiles et PC',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'table',
|
|
127
|
+
headers: ['Plateforme Cible', 'Taille Maximale Recommandée', 'Exigence Puissance de 2', 'Profil Mémoire'],
|
|
128
|
+
rows: [
|
|
129
|
+
['Navigateurs Mobiles', '2048 x 2048 px', 'Recommandé', 'Bande Passante Basse'],
|
|
130
|
+
['PC / Console de Jeu', '4096 x 4096 px', 'Optionnel', 'Capacité GPU Élevée'],
|
|
131
|
+
['Consoles Portables Retro', '1024 x 1024 px', 'Obligatoire', 'Limites VRAM Strictes'],
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
type: 'proscons',
|
|
136
|
+
items: [
|
|
137
|
+
{
|
|
138
|
+
pro: 'Garantit une compatibilité totale avec les anciens pilotes et WebGL 1.0',
|
|
139
|
+
con: 'Peut laisser un espace transparent inutilisé avec peu de sprites',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
pro: 'Permet la prise en charge automatique du mipmapping',
|
|
143
|
+
con: 'Nécessite un réglage fin des marges pour les formes irregulars',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
pro: 'Optimise l allocation de la mémoire VRAM du GPU',
|
|
147
|
+
con: 'Augmente légèrement la surface initiale de texture',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
level: 2,
|
|
154
|
+
text: 'Termes Clés de l Empaquetage de Sprites',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'glossary',
|
|
158
|
+
items: [
|
|
159
|
+
{
|
|
160
|
+
term: 'Draw Call',
|
|
161
|
+
definition: 'Commande envoyée par le processeur à la carte graphique pour afficher de la géométrie et des textures.',
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
term: 'Bin Packing',
|
|
165
|
+
definition: 'Algorithme d aménagement de rectangles de différentes tailles dans un espace minimal.',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
term: 'Border Extrusion',
|
|
169
|
+
definition: 'Duplication des pixels de bordure vers l extérieur pour éviter les décalages visuels.',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
term: 'Flipbook Animation',
|
|
173
|
+
definition: 'Lecture séquentielle rapide d images pour simular un mouvement continu en 2D.',
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
type: 'title',
|
|
179
|
+
level: 2,
|
|
180
|
+
text: 'Liste de Contrôle pour Développeurs',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
type: 'diagnostic',
|
|
184
|
+
variant: 'info',
|
|
185
|
+
title: 'Règles de Production',
|
|
186
|
+
html: 'Regroupez les animations dans des atlases partagés et roguez la transparence.',
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
faq: [
|
|
190
|
+
{
|
|
191
|
+
question: 'Qu est-ce qu un sprite sheet et pourquoi est-ce essentiel en 2D?',
|
|
192
|
+
answer:
|
|
193
|
+
'Un sprite sheet est un fichier image composite regroupant plusieurs animations.',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
question: 'Comment fonctionne le traitement local dans cet outil?',
|
|
197
|
+
answer:
|
|
198
|
+
'Vos fichiers sont traités localement dans votre navigateur via l API Canvas HTML5.',
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
question: 'Puis-je découper une planche de sprites existante?',
|
|
202
|
+
answer:
|
|
203
|
+
'Oui. Passez en mode Extracteur, déposez votre planche et configurez la grille de découpage.',
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
howTo: [
|
|
207
|
+
{
|
|
208
|
+
name: 'Importer des Images',
|
|
209
|
+
text: 'Faites glisser vos fichiers PNG ou WebP dans la zone de dépôt.',
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: 'Régler les Paramètres',
|
|
213
|
+
text: 'Ajustez l espacement, l extrusion et la taille maximale de texture.',
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: 'Prévisualiser et Télécharger',
|
|
217
|
+
text: 'Testez l animation dans le lecteur et téléchargez votre archive ZIP.',
|
|
218
|
+
},
|
|
219
|
+
],
|
|
220
|
+
schemas: [
|
|
221
|
+
{
|
|
222
|
+
'@context': 'https://schema.org',
|
|
223
|
+
'@type': 'SoftwareApplication',
|
|
224
|
+
name: 'Empaqueteur et Extracteur de Sprite Sheets',
|
|
225
|
+
applicationCategory: 'DeveloperApplication',
|
|
226
|
+
operatingSystem: 'Any',
|
|
227
|
+
offers: {
|
|
228
|
+
'@type': 'Offer',
|
|
229
|
+
price: '0',
|
|
230
|
+
priceCurrency: 'USD',
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
'@context': 'https://schema.org',
|
|
235
|
+
'@type': 'FAQPage',
|
|
236
|
+
mainEntity: [
|
|
237
|
+
{
|
|
238
|
+
'@type': 'Question',
|
|
239
|
+
name: 'Qu est-ce qu un sprite sheet et pourquoi est-ce essentiel en 2D?',
|
|
240
|
+
acceptedAnswer: {
|
|
241
|
+
'@type': 'Answer',
|
|
242
|
+
text: 'Un sprite sheet est un fichier image composite regroupant plusieurs animations.',
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
'@context': 'https://schema.org',
|
|
249
|
+
'@type': 'HowTo',
|
|
250
|
+
name: 'Comment empaqueter et extraire des sprite sheets',
|
|
251
|
+
step: [
|
|
252
|
+
{
|
|
253
|
+
'@type': 'HowToStep',
|
|
254
|
+
name: 'Importer des Images',
|
|
255
|
+
text: 'Faites glisser vos fichiers PNG ou WebP dans la zone de dépôt.',
|
|
256
|
+
},
|
|
257
|
+
],
|
|
258
|
+
},
|
|
259
|
+
],
|
|
260
|
+
bibliography: [
|
|
261
|
+
{
|
|
262
|
+
name: 'Godot Engine 2D Sprite Sheets Documentation',
|
|
263
|
+
url: 'https://docs.godotengine.org/en/stable/tutorials/2d/2d_sprite_animation.html',
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: 'Unity Sprite Atlas Manual',
|
|
267
|
+
url: 'https://docs.unity3d.com/Manual/class-SpriteAtlas.html',
|
|
268
|
+
},
|
|
269
|
+
],
|
|
270
|
+
};
|