@jjlmoya/utils-games-development 1.47.0 → 1.50.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.
Files changed (57) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +4 -1
  4. package/src/tests/locale_completeness.test.ts +1 -20
  5. package/src/tests/tool_validation.test.ts +2 -3
  6. package/src/tool/itchioGameTester/client.ts +12 -23
  7. package/src/tool/itchioGameTester/component.astro +0 -7
  8. package/src/tool/itchioGameTester/i18n/de.ts +0 -2
  9. package/src/tool/itchioGameTester/i18n/en.ts +0 -2
  10. package/src/tool/itchioGameTester/i18n/es.ts +0 -2
  11. package/src/tool/itchioGameTester/i18n/fr.ts +0 -2
  12. package/src/tool/itchioGameTester/i18n/id.ts +0 -2
  13. package/src/tool/itchioGameTester/i18n/it.ts +0 -2
  14. package/src/tool/itchioGameTester/i18n/ja.ts +0 -2
  15. package/src/tool/itchioGameTester/i18n/ko.ts +0 -2
  16. package/src/tool/itchioGameTester/i18n/nl.ts +0 -2
  17. package/src/tool/itchioGameTester/i18n/pl.ts +0 -2
  18. package/src/tool/itchioGameTester/i18n/pt.ts +0 -2
  19. package/src/tool/itchioGameTester/i18n/ru.ts +0 -2
  20. package/src/tool/itchioGameTester/i18n/sv.ts +0 -2
  21. package/src/tool/itchioGameTester/i18n/tr.ts +0 -2
  22. package/src/tool/itchioGameTester/i18n/zh.ts +0 -2
  23. package/src/tool/itchioGameTester/ui.ts +0 -2
  24. package/src/tool/spriteSheetPacker/app-client.ts +248 -0
  25. package/src/tool/spriteSheetPacker/bibliography.astro +6 -0
  26. package/src/tool/spriteSheetPacker/bibliography.ts +12 -0
  27. package/src/tool/spriteSheetPacker/component.astro +229 -0
  28. package/src/tool/spriteSheetPacker/dropzone-client.ts +55 -0
  29. package/src/tool/spriteSheetPacker/entry.ts +28 -0
  30. package/src/tool/spriteSheetPacker/exporter.ts +116 -0
  31. package/src/tool/spriteSheetPacker/extractor-client.ts +127 -0
  32. package/src/tool/spriteSheetPacker/flipbook-client.ts +60 -0
  33. package/src/tool/spriteSheetPacker/i18n/de.ts +270 -0
  34. package/src/tool/spriteSheetPacker/i18n/en.ts +275 -0
  35. package/src/tool/spriteSheetPacker/i18n/es.ts +275 -0
  36. package/src/tool/spriteSheetPacker/i18n/fr.ts +270 -0
  37. package/src/tool/spriteSheetPacker/i18n/id.ts +270 -0
  38. package/src/tool/spriteSheetPacker/i18n/it.ts +270 -0
  39. package/src/tool/spriteSheetPacker/i18n/ja.ts +270 -0
  40. package/src/tool/spriteSheetPacker/i18n/ko.ts +270 -0
  41. package/src/tool/spriteSheetPacker/i18n/nl.ts +270 -0
  42. package/src/tool/spriteSheetPacker/i18n/pl.ts +270 -0
  43. package/src/tool/spriteSheetPacker/i18n/pt.ts +270 -0
  44. package/src/tool/spriteSheetPacker/i18n/ru.ts +266 -0
  45. package/src/tool/spriteSheetPacker/i18n/sv.ts +270 -0
  46. package/src/tool/spriteSheetPacker/i18n/tr.ts +270 -0
  47. package/src/tool/spriteSheetPacker/i18n/zh.ts +270 -0
  48. package/src/tool/spriteSheetPacker/index.ts +11 -0
  49. package/src/tool/spriteSheetPacker/logic.test.ts +155 -0
  50. package/src/tool/spriteSheetPacker/logic.ts +32 -0
  51. package/src/tool/spriteSheetPacker/packer-core.ts +121 -0
  52. package/src/tool/spriteSheetPacker/packer-ui.ts +86 -0
  53. package/src/tool/spriteSheetPacker/seo.astro +15 -0
  54. package/src/tool/spriteSheetPacker/sprite-sheet-packer.css +578 -0
  55. package/src/tool/spriteSheetPacker/types.ts +89 -0
  56. package/src/tool/spriteSheetPacker/ui.ts +42 -0
  57. package/src/tools.ts +2 -0
@@ -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: 'pembuat-dan-ekstraktor-sprite-sheet',
6
+ title: 'Pembuat dan Ekstraktor Sprite Sheet',
7
+ description:
8
+ 'Optimalkan performa game 2D dengan menggabungkan frame animasi ke atlas tekstur atau mengekstrak sprite dari sprite sheet.',
9
+ ui: {
10
+ packerTab: 'Studio Pembuat Atlas',
11
+ extractorTab: 'Ekstraktor Sprite',
12
+ dropZoneTitle: 'Tarik dan Lepas Gambar Frame',
13
+ dropZoneSubtitle: 'Unggah gambar PNG atau WebP untuk membuat atlas tekstur teroptimasi',
14
+ selectFilesButton: 'Pilih File Gambar',
15
+ clearAllButton: 'Bersihkan Ruang Kerja',
16
+ downloadZipButton: 'Unduh Paket (ZIP)',
17
+ copyJsonButton: 'Salin JSON Atlas',
18
+ downloadSheetPngButton: 'Unduh Tekstur PNG',
19
+ paddingLabel: 'Jarak Antar Frame (px)',
20
+ borderExtrusionLabel: 'Ekstrusi Tepi (px)',
21
+ maxTextureSizeLabel: 'Dimensi Maksimal Tekstur',
22
+ powerOfTwoLabel: 'Paksa Pangkat 2 (POT)',
23
+ trimTransparencyLabel: 'Potong Area Transparan',
24
+ exportFormatLabel: 'Format Engine Tujuan',
25
+ presetPixelArt: 'Preset Pixel Art 16x16',
26
+ presetHdUi: 'Preset Atlas HD UI 1024',
27
+ presetMobile: 'Preset Mobile WebGL 2048',
28
+ formatGenericHash: 'JSON Generik (Hash)',
29
+ formatGenericArray: 'JSON Generik (Array)',
30
+ formatUnity: 'Engine Unity 2D',
31
+ formatGodot: 'Engine Godot 2D',
32
+ formatPhaser: 'Engine Phaser / PixiJS',
33
+ formatCss: 'CSS Web Frontend',
34
+ previewTitle: 'Pratinjau Atlas Tekstur',
35
+ efficiencyBadge: 'Efisiensi Tekstur',
36
+ drawCallsBadge: 'Pengurangan Draw Call',
37
+ totalFramesBadge: 'Frame Tergabung',
38
+ textureSizeBadge: 'Dimensi Atlas',
39
+ flipbookTitle: 'Pemutar Animasi Flipbook',
40
+ flipbookFpsLabel: 'Kecepatan Animasi (FPS)',
41
+ playAnimation: 'Putar Animasi',
42
+ pauseAnimation: 'Hentikan Animasi',
43
+ extractorModeGrid: 'Pemotongan Grid Tetap',
44
+ extractorModeAlpha: 'Pemotongan Saluran Alfa Otomatis',
45
+ frameWidthLabel: 'Lebar Frame (px)',
46
+ frameHeightLabel: 'Tinggi Frame (px)',
47
+ marginLabel: 'Batas Margin (px)',
48
+ spacingLabel: 'Jarak Antar Grid (px)',
49
+ extractFramesButton: 'Ekstrak Gambar Frame',
50
+ extractedCountLabel: 'Sprite Terekstrak',
51
+ codeSnippetTitle: 'Kode Integrasi Engine',
52
+ copySnippetButton: 'Salin Kode',
53
+ copiedToast: 'Tersalin ke Papan Klip',
54
+ },
55
+ seo: [
56
+ {
57
+ type: 'title',
58
+ level: 2,
59
+ text: 'Optimasi Performa Game 2D dan Perintah Draw Call',
60
+ },
61
+ {
62
+ type: 'paragraph',
63
+ html: 'Dalam arsitektur kartu grafis modern, menggabungkan gambar frame menjadi satu atlas tekstur mengurangi jumlah perintah penggambaran draw call yang dikirimkan oleh prosesor CPU ke GPU.',
64
+ },
65
+ {
66
+ type: 'stats',
67
+ columns: 4,
68
+ items: [
69
+ { value: '95%', label: 'Pengurangan Draw Call' },
70
+ { value: '4x', label: 'Proses GPU Lebih Cepat' },
71
+ { value: '60 FPS', label: 'Target Stabil di Seluler' },
72
+ { value: '100%', label: 'Pemrosesan Lokal Browser' },
73
+ ],
74
+ },
75
+ {
76
+ type: 'title',
77
+ level: 2,
78
+ text: 'Perbandingan Gambar Terpisah vs Atlas Tekstur Tergabung',
79
+ },
80
+ {
81
+ type: 'comparative',
82
+ columns: 2,
83
+ items: [
84
+ {
85
+ title: 'File Frame Terpisah',
86
+ description: 'File PNG atau WebP disimpan terpisah',
87
+ points: [
88
+ 'Membuat perintah gambar terpisah untuk setiap frame di layar',
89
+ 'Menyebabkan alih konteks yang sering pada kartu grafis GPU',
90
+ 'Meningkatkan jumlah permintaan HTTP untuk game berbasis web',
91
+ 'Penurunan kecepatan frame pada perangkat seluler',
92
+ ],
93
+ },
94
+ {
95
+ title: 'Atlas Tekstur Tergabung',
96
+ description: 'Gambar tunggal dibundel dengan data JSON',
97
+ points: [
98
+ 'Menggabungkan ratusan sprite dalam satu perintah draw call GPU',
99
+ 'Memaksimalkan bandwidth memori dan throughput rendering grafis',
100
+ 'Mengurangi permintaan file dengan membundel tekstur dan data',
101
+ 'Memastikan kecepatan frame yang mulus di semua platform',
102
+ ],
103
+ },
104
+ ],
105
+ },
106
+ {
107
+ type: 'title',
108
+ level: 2,
109
+ text: 'Pencegahan Kebocoran Piksel dan Ekstrusi Tepi',
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: 'Menambahkan ekstrusi tepi 1 hingga 2 piksel menduplikasi warna piksel terluar untuk mencegah garis keretakan saat kamera bergerak.',
114
+ },
115
+ {
116
+ type: 'tip',
117
+ title: 'Strategi Ekstrusi Tepi Tekstur',
118
+ html: 'Gunakan ekstrusi tepi saat memproses sprite sheet agar pemfilteran tekstur berjalan mulus tanpa cacat visual.',
119
+ },
120
+ {
121
+ type: 'title',
122
+ level: 2,
123
+ text: 'Panduan Ukuran Tekstur untuk Berbagai Platform',
124
+ },
125
+ {
126
+ type: 'table',
127
+ headers: ['Platform Tujuan', 'Ukuran Maksimal Disarankan', 'Kebutuhan Pangkat 2', 'Profil Memori'],
128
+ rows: [
129
+ ['Browser Seluler', '2048 x 2048 px', 'Wajib di WebGL 1.0', 'Bandwidth Rendah'],
130
+ ['PC / Konsol', '4096 x 4096 px', 'Disarankan', 'Kapasitas GPU Tinggi'],
131
+ ['Konsol Genggam Retro', '1024 x 1024 px', 'Wajib', 'Batas VRAM Ketat'],
132
+ ],
133
+ },
134
+ {
135
+ type: 'proscons',
136
+ items: [
137
+ {
138
+ pro: 'Menjamin kompatibilitas penuh dengan driver grafis lama dan WebGL 1.0',
139
+ con: 'Dapat meninggalkan area transparan kosong jika jumlah sprite sedikit',
140
+ },
141
+ {
142
+ pro: 'Mendukung mipmapping otomatis untuk pemfilteran tekstur keras',
143
+ con: 'Membutuhkan pengaturan jarak yang cermat pada frame tidak teratur',
144
+ },
145
+ {
146
+ pro: 'Mengoptimalkan alokasi memori VRAM pada kartu grafis GPU',
147
+ con: 'Sedikit meningkatkan alokasi area tekstur awal',
148
+ },
149
+ ],
150
+ },
151
+ {
152
+ type: 'title',
153
+ level: 2,
154
+ text: 'Glosari Istilah Teknis',
155
+ },
156
+ {
157
+ type: 'glossary',
158
+ items: [
159
+ {
160
+ term: 'Draw Call',
161
+ definition: 'Perintah yang dikirimkan prosesor CPU ke kartu grafis GPU untuk merender tekstur.',
162
+ },
163
+ {
164
+ term: 'Bin Packing',
165
+ definition: 'Teknik algoritma untuk mengatur elemen persegi dalam kontainer berukuran minimal.',
166
+ },
167
+ {
168
+ term: 'Border Extrusion',
169
+ definition: 'Penduplikasian piksel tepi luar untuk mencegah timbulnya garis keretakan saat kamera bergerak.',
170
+ },
171
+ {
172
+ term: 'Flipbook Animation',
173
+ definition: 'Pemutaran urutan gambar cepat untuk mensimulasikan gerakan kontinu dalam game 2D.',
174
+ },
175
+ ],
176
+ },
177
+ {
178
+ type: 'title',
179
+ level: 2,
180
+ text: 'Daftar Periksa Performa',
181
+ },
182
+ {
183
+ type: 'diagnostic',
184
+ variant: 'info',
185
+ title: 'Aturan Produksi',
186
+ html: 'Gabungkan animasi karakter ke dalam atlas bersama dan gunakan dimensi pangkat dua untuk ekspor WebGL.',
187
+ },
188
+ ],
189
+ faq: [
190
+ {
191
+ question: 'Apa itu sprite sheet dan mengapa penting untuk game 2D?',
192
+ answer:
193
+ 'Sprite sheet adalah file gambar komposit yang berisi banyak frame animasi. Penggabungan ini memungkinkan game engine merender banyak objek dalam satu perintah gambar GPU.',
194
+ },
195
+ {
196
+ question: 'Bagaimana cara kerja pemrosesan lokal dalam alat ini?',
197
+ answer:
198
+ 'Gambar Anda diproses secara lokal di browser Anda melalui HTML5 Canvas API tanpa mengirim data ke server luar.',
199
+ },
200
+ {
201
+ question: 'Apakah saya bisa mengekstrak gambar dari sprite sheet yang ada?',
202
+ answer:
203
+ 'Ya. Beralihlah ke mode Ekstraktor, unggah sprite sheet Anda, dan atur ukuran grid pemotongan.',
204
+ },
205
+ ],
206
+ howTo: [
207
+ {
208
+ name: 'Unggah Gambar Frame',
209
+ text: 'Tarik dan lepas file PNG atau WebP ke area unggah.',
210
+ },
211
+ {
212
+ name: 'Atur Pengaturan Penggabungan',
213
+ text: 'Sesuaikan jarak, ekstrusi tepi, dan ukuran maksimal tekstur.',
214
+ },
215
+ {
216
+ name: 'Pratinjau dan Unduh',
217
+ text: 'Uji animasi pada pemutar flipbook lalu unduh paket ZIP.',
218
+ },
219
+ ],
220
+ schemas: [
221
+ {
222
+ '@context': 'https://schema.org',
223
+ '@type': 'SoftwareApplication',
224
+ name: 'Pembuat dan Ekstraktor Sprite Sheet',
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: 'Apa itu sprite sheet dan mengapa penting untuk game 2D?',
240
+ acceptedAnswer: {
241
+ '@type': 'Answer',
242
+ text: 'Sprite sheet adalah file gambar komposit yang berisi banyak frame animasi untuk merender banyak objek dalam satu perintah GPU.',
243
+ },
244
+ },
245
+ ],
246
+ },
247
+ {
248
+ '@context': 'https://schema.org',
249
+ '@type': 'HowTo',
250
+ name: 'Cara Menggabungkan dan Mengekstrak Sprite Sheet',
251
+ step: [
252
+ {
253
+ '@type': 'HowToStep',
254
+ name: 'Unggah Gambar Frame',
255
+ text: 'Tarik dan lepas file PNG atau WebP ke area unggah.',
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
+ };
@@ -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: 'impacchettatore-ed-estruttore-di-sprite-sheet',
6
+ title: 'Impacchettatore ed Estrattore di Sprite Sheet',
7
+ description:
8
+ 'Ottimizza le prestazioni dei giochi 2D unendo fotogrammi di animazione singoli in atlas di texture o estraendo sprite da fogli esistenti.',
9
+ ui: {
10
+ packerTab: 'Studio di Impacchettamento',
11
+ extractorTab: 'Estrattore di Sprite',
12
+ dropZoneTitle: 'Trascina e Rilascia i Fotogrammi',
13
+ dropZoneSubtitle: 'Carica immagini PNG o WebP per generare il tuo atlas di texture ottimizzato',
14
+ selectFilesButton: 'Seleziona Immagini',
15
+ clearAllButton: 'Svuota Area di Lavoro',
16
+ downloadZipButton: 'Scarica Pacchetto (ZIP)',
17
+ copyJsonButton: 'Copia JSON dell Atlas',
18
+ downloadSheetPngButton: 'Scarica Texture PNG',
19
+ paddingLabel: 'Spaziatura Fotogrammi (px)',
20
+ borderExtrusionLabel: 'Estrusione del Bordo (px)',
21
+ maxTextureSizeLabel: 'Dimensione Massima Texture',
22
+ powerOfTwoLabel: 'Forza Potenza di 2 (POT)',
23
+ trimTransparencyLabel: 'Ritaglia Trasparenza',
24
+ exportFormatLabel: 'Formato del Motore Target',
25
+ presetPixelArt: 'Preset Pixel Art 16x16',
26
+ presetHdUi: 'Preset Atlas HD UI 1024',
27
+ presetMobile: 'Preset Mobile WebGL 2048',
28
+ formatGenericHash: 'JSON Generico (Hash)',
29
+ formatGenericArray: 'JSON Generico (Array)',
30
+ formatUnity: 'Motore Unity 2D',
31
+ formatGodot: 'Motore Godot 2D',
32
+ formatPhaser: 'Motore Phaser / PixiJS',
33
+ formatCss: 'CSS Web Frontend',
34
+ previewTitle: 'Anteprima dell Atlas di Texture',
35
+ efficiencyBadge: 'Efficienza Texture',
36
+ drawCallsBadge: 'Chiamate di Disegno Ridotte',
37
+ totalFramesBadge: 'Fotogrammi Impacchettati',
38
+ textureSizeBadge: 'Dimensione dell Atlas',
39
+ flipbookTitle: 'Lettore Animazione Flipbook',
40
+ flipbookFpsLabel: 'Velocità Animazione (FPS)',
41
+ playAnimation: 'Avvia Sequenza',
42
+ pauseAnimation: 'Metti in Pausa',
43
+ extractorModeGrid: 'Taglio a Griglia Fissa',
44
+ extractorModeAlpha: 'Taglio Automatico Canale Alfa',
45
+ frameWidthLabel: 'Larghezza Fotogramma (px)',
46
+ frameHeightLabel: 'Altezza Fotogramma (px)',
47
+ marginLabel: 'Margine Esterno (px)',
48
+ spacingLabel: 'Spaziatura Griglia (px)',
49
+ extractFramesButton: 'Estrai Fotogrammi',
50
+ extractedCountLabel: 'Sprite Estratti',
51
+ codeSnippetTitle: 'Codice di Integrazione Motore',
52
+ copySnippetButton: 'Copia Codice',
53
+ copiedToast: 'Copiato negli Appunti',
54
+ },
55
+ seo: [
56
+ {
57
+ type: 'title',
58
+ level: 2,
59
+ text: 'Comprensione del Batching GPU e Ottimizzazione Chiamate di Disegno',
60
+ },
61
+ {
62
+ type: 'paragraph',
63
+ html: 'Nelle moderne pipeline grafiche 2D, raggruppare i fotogrammi di animazione singoli in un unico atlas di texture consente alla GPU di disegnare tutti gli oggetti in un unica chiamata di disegno.',
64
+ },
65
+ {
66
+ type: 'stats',
67
+ columns: 4,
68
+ items: [
69
+ { value: '95%', label: 'Riduzione Chiamate di Disegno' },
70
+ { value: '4x', label: 'Elaborazione GPU più Rapida' },
71
+ { value: '60 FPS', label: 'Target Stabile su Mobile' },
72
+ { value: '100%', label: 'Elaborazione Locale Browser' },
73
+ ],
74
+ },
75
+ {
76
+ type: 'title',
77
+ level: 2,
78
+ text: 'Confronto tra File Fotogrammi Singoli e Atlas di Texture',
79
+ },
80
+ {
81
+ type: 'comparative',
82
+ columns: 2,
83
+ items: [
84
+ {
85
+ title: 'File di Fotogrammi Separati',
86
+ description: 'File PNG o WebP salvati singolarmente',
87
+ points: [
88
+ 'Genera una chiamata di disegno distinta per ogni singolo fotogramma a schermo',
89
+ 'Provoca frequenti cambi di contesto sulla scheda grafica GPU',
90
+ 'Aumenta il numero di richieste HTTP nei giochi web',
91
+ 'Prestazioni inferiori sui dispositivi mobili',
92
+ ],
93
+ },
94
+ {
95
+ title: 'Atlas di Texture Unito',
96
+ description: 'Unica immagine PNG abbinata a metadati JSON',
97
+ points: [
98
+ 'Raggruppa centinaia di sprite in un unica chiamata di disegno GPU',
99
+ 'Massimizza la larghezza di banda della memoria e la velocità di rendering',
100
+ 'Riduce le richieste di file raggruppando texture e dati',
101
+ 'Garantisce una frequenza di fotogrammi fluida su tutte le piattaforme',
102
+ ],
103
+ },
104
+ ],
105
+ },
106
+ {
107
+ type: 'title',
108
+ level: 2,
109
+ text: 'Matematica dell Estrusione dei Bordi e Movimento Subpixel',
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: 'Applicare un estrusione di bordo da 1 a 2 pixel duplica i pixel esterni evitando imperfezioni visive durante i movimenti di fotocamera.',
114
+ },
115
+ {
116
+ type: 'tip',
117
+ title: 'Strategia di Estrusione dei Bordi',
118
+ html: 'Utilizza l estrusione dei bordi per evitare che i pixel adiacenti sfumino tra loro nei movimenti di fotocamera.',
119
+ },
120
+ {
121
+ type: 'title',
122
+ level: 2,
123
+ text: 'Guida alle Dimensioni delle Texture',
124
+ },
125
+ {
126
+ type: 'table',
127
+ headers: ['Piattaforma Target', 'Dimensione Massima Consigliata', 'Requisito Potenza di 2', 'Profilo Memoria'],
128
+ rows: [
129
+ ['Browser Mobile', '2048 x 2048 px', 'Obbligatorio in WebGL 1.0', 'Bassa Larghezza di Banda'],
130
+ ['PC / Console', '4096 x 4096 px', 'Consigliato', 'Alta Capacità GPU'],
131
+ ['Console Portatili Retro', '1024 x 1024 px', 'Requisito Rigido', 'Limiti VRAM Rigidi'],
132
+ ],
133
+ },
134
+ {
135
+ type: 'proscons',
136
+ items: [
137
+ {
138
+ pro: 'Garantisce piena compatibilità con driver grafici datati e WebGL 1.0',
139
+ con: 'Può lasciare spazio trasparente inutilizzato con pochi sprite',
140
+ },
141
+ {
142
+ pro: 'Abilita il supporto automatico al mipmapping',
143
+ con: 'Richiede un attenta regolazione della spaziatura per forme irregolari',
144
+ },
145
+ {
146
+ pro: 'Ottimizza l allocazione di memoria VRAM sulla GPU',
147
+ con: 'Aumenta leggermente l area di texture iniziale',
148
+ },
149
+ ],
150
+ },
151
+ {
152
+ type: 'title',
153
+ level: 2,
154
+ text: 'Termini Chiave nell Impacchettamento',
155
+ },
156
+ {
157
+ type: 'glossary',
158
+ items: [
159
+ {
160
+ term: 'Draw Call',
161
+ definition: 'Comando inviato dal processore alla scheda grafica per il rendering di geometria e texture.',
162
+ },
163
+ {
164
+ term: 'Bin Packing',
165
+ definition: 'Tecnica algoritmica per disporre elementi rettangolari di varie dimensioni in un contenitore minimo.',
166
+ },
167
+ {
168
+ term: 'Border Extrusion',
169
+ definition: 'Duplicazione dei pixel del bordo verso l esterno per evitare imperfezioni visive.',
170
+ },
171
+ {
172
+ term: 'Flipbook Animation',
173
+ definition: 'Riproduzione sequenziale rapida di immagini per simulare il movimento continuo nei giochi 2D.',
174
+ },
175
+ ],
176
+ },
177
+ {
178
+ type: 'title',
179
+ level: 2,
180
+ text: 'Lista di Controllo delle Prestazioni',
181
+ },
182
+ {
183
+ type: 'diagnostic',
184
+ variant: 'info',
185
+ title: 'Regole di Produzione',
186
+ html: 'Raggruppa le animazioni in atlas condivisi e forza dimensioni in potenza di due per WebGL.',
187
+ },
188
+ ],
189
+ faq: [
190
+ {
191
+ question: 'Cos è uno sprite sheet e perché è essenziale per i giochi 2D?',
192
+ answer:
193
+ 'Uno sprite sheet è un unico file immagine contenente più grafiche o fotogrammi. Questo permette al motore di gioco di disegnare molti oggetti in un unica chiamata GPU.',
194
+ },
195
+ {
196
+ question: 'Come funziona l elaborazione locale in questo strumento?',
197
+ answer:
198
+ 'Le tue immagini vengono elaborate localmente nel tuo browser tramite l API Canvas HTML5 senza inviare dati a server esterni.',
199
+ },
200
+ {
201
+ question: 'Posso estrarre i fotogrammi da uno sprite sheet esistente?',
202
+ answer:
203
+ 'Sì. Passa alla modalità Estrattore, carica lo foglio e imposta le dimensioni della griglia di taglio.',
204
+ },
205
+ ],
206
+ howTo: [
207
+ {
208
+ name: 'Carica le Immagini',
209
+ text: 'Trascina e rilascia i tuoi file PNG o WebP nell area di caricamento.',
210
+ },
211
+ {
212
+ name: 'Configura le Impostazioni',
213
+ text: 'Regola la spaziatura, l estrusione dei bordi e la dimensione massima della texture.',
214
+ },
215
+ {
216
+ name: 'Anteprima e Download',
217
+ text: 'Verifica l animazione nel lettore flipbook e scarica il pacchetto ZIP.',
218
+ },
219
+ ],
220
+ schemas: [
221
+ {
222
+ '@context': 'https://schema.org',
223
+ '@type': 'SoftwareApplication',
224
+ name: 'Impacchettatore ed Estrattore di Sprite Sheet',
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: 'Cos è uno sprite sheet e perché è essenziale per i giochi 2D?',
240
+ acceptedAnswer: {
241
+ '@type': 'Answer',
242
+ text: 'Uno sprite sheet è un unico file immagine contenente più grafiche che permette di disegnare più oggetti in un unica chiamata GPU.',
243
+ },
244
+ },
245
+ ],
246
+ },
247
+ {
248
+ '@context': 'https://schema.org',
249
+ '@type': 'HowTo',
250
+ name: 'Come impacchettare ed estrarre sprite sheet',
251
+ step: [
252
+ {
253
+ '@type': 'HowToStep',
254
+ name: 'Carica le Immagini',
255
+ text: 'Trascina e rilascia i tuoi file PNG o WebP nell area di caricamento.',
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
+ };