@jjlmoya/utils-games-development 1.47.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 +4 -1
- package/src/tests/locale_completeness.test.ts +1 -20
- package/src/tests/tool_validation.test.ts +2 -3
- package/src/tool/itchioGameTester/client.ts +12 -23
- package/src/tool/itchioGameTester/component.astro +0 -7
- package/src/tool/itchioGameTester/i18n/de.ts +0 -2
- package/src/tool/itchioGameTester/i18n/en.ts +0 -2
- package/src/tool/itchioGameTester/i18n/es.ts +0 -2
- package/src/tool/itchioGameTester/i18n/fr.ts +0 -2
- package/src/tool/itchioGameTester/i18n/id.ts +0 -2
- package/src/tool/itchioGameTester/i18n/it.ts +0 -2
- package/src/tool/itchioGameTester/i18n/ja.ts +0 -2
- package/src/tool/itchioGameTester/i18n/ko.ts +0 -2
- package/src/tool/itchioGameTester/i18n/nl.ts +0 -2
- package/src/tool/itchioGameTester/i18n/pl.ts +0 -2
- package/src/tool/itchioGameTester/i18n/pt.ts +0 -2
- package/src/tool/itchioGameTester/i18n/ru.ts +0 -2
- package/src/tool/itchioGameTester/i18n/sv.ts +0 -2
- package/src/tool/itchioGameTester/i18n/tr.ts +0 -2
- package/src/tool/itchioGameTester/i18n/zh.ts +0 -2
- package/src/tool/itchioGameTester/ui.ts +0 -2
- 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 +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: 'sprite-sheet-packer-en-extractor',
|
|
6
|
+
title: 'Sprite Sheet Packer en Extractor',
|
|
7
|
+
description:
|
|
8
|
+
'Optimaliseer 2D game prestaties door afzonderlijke animatie frames samen te voegen in textuur atlassen of sprites te extraheren uit bestaande sheets.',
|
|
9
|
+
ui: {
|
|
10
|
+
packerTab: 'Packer Studio',
|
|
11
|
+
extractorTab: 'Sprite Extractor',
|
|
12
|
+
dropZoneTitle: 'Sleep Frames Hierheen',
|
|
13
|
+
dropZoneSubtitle: 'Upload PNG of WebP afbeeldingen om een geoptimaliseerde textuuratlas te genereren',
|
|
14
|
+
selectFilesButton: 'Selecteer Afbeeldingen',
|
|
15
|
+
clearAllButton: 'Werkruimte Wissen',
|
|
16
|
+
downloadZipButton: 'Pakket Downloaden (ZIP)',
|
|
17
|
+
copyJsonButton: 'Atlas JSON Kopiëren',
|
|
18
|
+
downloadSheetPngButton: 'Textuur PNG Downloaden',
|
|
19
|
+
paddingLabel: 'Frame Afstand (px)',
|
|
20
|
+
borderExtrusionLabel: 'Rand Extrusie (px)',
|
|
21
|
+
maxTextureSizeLabel: 'Maximale Textuur Dimensie',
|
|
22
|
+
powerOfTwoLabel: 'Macht van 2 Forceren (POT)',
|
|
23
|
+
trimTransparencyLabel: 'Transparantie Bijsnijden',
|
|
24
|
+
exportFormatLabel: 'Doel Engine Formaat',
|
|
25
|
+
presetPixelArt: 'Pixel Art 16x16 Preset',
|
|
26
|
+
presetHdUi: 'HD UI Atlas 1024 Preset',
|
|
27
|
+
presetMobile: 'Mobiel WebGL 2048 Preset',
|
|
28
|
+
formatGenericHash: 'Generieke JSON (Hash)',
|
|
29
|
+
formatGenericArray: 'Generieke JSON (Array)',
|
|
30
|
+
formatUnity: 'Unity 2D Engine',
|
|
31
|
+
formatGodot: 'Godot 2D Engine',
|
|
32
|
+
formatPhaser: 'Phaser / PixiJS Engine',
|
|
33
|
+
formatCss: 'Web Frontend CSS',
|
|
34
|
+
previewTitle: 'Textuur Atlas Voorbeeld',
|
|
35
|
+
efficiencyBadge: 'Textuur Efficiëntie',
|
|
36
|
+
drawCallsBadge: 'Gereduceerde Draw Calls',
|
|
37
|
+
totalFramesBadge: 'Gepakte Frames',
|
|
38
|
+
textureSizeBadge: 'Atlas Afmeting',
|
|
39
|
+
flipbookTitle: 'Animatie Flipbook Speler',
|
|
40
|
+
flipbookFpsLabel: 'Animatie Snelheid (FPS)',
|
|
41
|
+
playAnimation: 'Afspelen',
|
|
42
|
+
pauseAnimation: 'Pauzeren',
|
|
43
|
+
extractorModeGrid: 'Vaste Raster Uitsnede',
|
|
44
|
+
extractorModeAlpha: 'Automatische Alpha Kanaal Uitsnede',
|
|
45
|
+
frameWidthLabel: 'Frame Breedte (px)',
|
|
46
|
+
frameHeightLabel: 'Frame Hoogte (px)',
|
|
47
|
+
marginLabel: 'Marge Offset (px)',
|
|
48
|
+
spacingLabel: 'Raster Afstand (px)',
|
|
49
|
+
extractFramesButton: 'Frames Extraheren',
|
|
50
|
+
extractedCountLabel: 'Geëxtraheerde Sprites',
|
|
51
|
+
codeSnippetTitle: 'Engine Integratie Code',
|
|
52
|
+
copySnippetButton: 'Code Kopiëren',
|
|
53
|
+
copiedToast: 'Gekopieerd naar Klembord',
|
|
54
|
+
},
|
|
55
|
+
seo: [
|
|
56
|
+
{
|
|
57
|
+
type: 'title',
|
|
58
|
+
level: 2,
|
|
59
|
+
text: 'GPU Batching en Draw Call Optimalisatie in 2D Game Engines',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'paragraph',
|
|
63
|
+
html: 'Het samenvoegen van losse afbeeldingen tot één textuuratlas vermindert het aantal draw calls dat de CPU naar de videokaart stuurt aanzienlijk.',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: 'stats',
|
|
67
|
+
columns: 4,
|
|
68
|
+
items: [
|
|
69
|
+
{ value: '95%', label: 'Reductie van Draw Calls' },
|
|
70
|
+
{ value: '4x', label: 'Snellere GPU Verwerking' },
|
|
71
|
+
{ value: '60 FPS', label: 'Stabiel Doel op Mobiel' },
|
|
72
|
+
{ value: '100%', label: 'Lokale Verwerking in Browser' },
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
level: 2,
|
|
78
|
+
text: 'Losse Afbeeldingen vs Gecomprimeerde Textuur Atlassen',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'comparative',
|
|
82
|
+
columns: 2,
|
|
83
|
+
items: [
|
|
84
|
+
{
|
|
85
|
+
title: 'Losse Animatie Bestanden',
|
|
86
|
+
description: 'Afzonderlijk opgeslagen PNG bestanden',
|
|
87
|
+
points: [
|
|
88
|
+
'Genereert een afzonderlijke draw call voor elk frame op het scherm',
|
|
89
|
+
'Veroorzaakt frequente wissels op de grafische kaart GPU',
|
|
90
|
+
'Verhoogt het aantal netwerkverzoeken bij web games',
|
|
91
|
+
'Lagere framerates op mobiele apparaten',
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
title: 'Gepakte Textuur Atlas',
|
|
96
|
+
description: 'Enkele PNG afbeelding gekoppeld aan JSON metadata',
|
|
97
|
+
points: [
|
|
98
|
+
'Bundelt honderden sprites in één enkele GPU draw call',
|
|
99
|
+
'Optimaliseert het geheugengebruik en de grafische snelheid',
|
|
100
|
+
'Vermindert bestandsverzoeken door textuur en gegevens te bundelen',
|
|
101
|
+
'Garanteert vloeiende 60 FPS prestaties op alle platforms',
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'title',
|
|
108
|
+
level: 2,
|
|
109
|
+
text: 'Subpixel Camerabeweging en Rand Extrusie',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'paragraph',
|
|
113
|
+
html: 'Het toepassen van 1 tot 2 pixels rand extrusie kopieert de buitenste randpixels om visuele randfouten bij camerabewegingen te voorkomen.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'tip',
|
|
117
|
+
title: 'Strategie voor Rand Extrusie',
|
|
118
|
+
html: 'Gebruik rand extrusie om randfouten bij camerabewegingen in 2D games volledig te elimineren.',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'title',
|
|
122
|
+
level: 2,
|
|
123
|
+
text: 'Aanbevolen Textuur Afmetingen voor Verschillende Platformen',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'table',
|
|
127
|
+
headers: ['Doelplatform', 'Aanbevolen Max Grootte', 'Macht van 2 Vereist', 'Geheugenprofiel'],
|
|
128
|
+
rows: [
|
|
129
|
+
['Mobiele Browsers', '2048 x 2048 px', 'Verplicht voor WebGL 1.0', 'Lage Bandbreedte'],
|
|
130
|
+
['Desktop PC / Console', '4096 x 4096 px', 'Aanbevolen', 'Hoge GPU Capaciteit'],
|
|
131
|
+
['Retro Handhelds', '1024 x 1024 px', 'Strikte Vereiste', 'Strikte VRAM Limieten'],
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
type: 'proscons',
|
|
136
|
+
items: [
|
|
137
|
+
{
|
|
138
|
+
pro: 'Garanteert volledige compatibiliteit met oudere grafische stuurprogramma s en WebGL 1.0',
|
|
139
|
+
con: 'Kan ongebruikte transparante ruimte achterlaten bij weinig sprites',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
pro: 'Ondersteunt automatische hardware mipmapping',
|
|
143
|
+
con: 'Vereist nauwkeurige afstelling bij onregelmatige afmetingen',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
pro: 'Optimaliseert VRAM geheugentoewijzing op de GPU',
|
|
147
|
+
con: 'Verhoogt de initiële textuuroppervlakte licht',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
level: 2,
|
|
154
|
+
text: 'Kernbegrippen bij Sprite Packing',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'glossary',
|
|
158
|
+
items: [
|
|
159
|
+
{
|
|
160
|
+
term: 'Draw Call',
|
|
161
|
+
definition: 'Een commando van de CPU naar de GPU om een groep textures te renderen.',
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
term: 'Bin Packing',
|
|
165
|
+
definition: 'Een algoritme om rechthoekige vormen efficiënt in een minimale ruimte te schikken.',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
term: 'Border Extrusion',
|
|
169
|
+
definition: 'Het kopiëren van randpixels naar buiten om visuele naden bij camerabewegingen te voorkomen.',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
term: 'Flipbook Animation',
|
|
173
|
+
definition: 'Het snel achter elkaar afspelen van opeenvolgende beelden om beweging te simuleren.',
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
type: 'title',
|
|
179
|
+
level: 2,
|
|
180
|
+
text: 'Prestatie Controlelijst voor Game Developers',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
type: 'diagnostic',
|
|
184
|
+
variant: 'info',
|
|
185
|
+
title: 'Productieregels',
|
|
186
|
+
html: 'Groepeer animaties in gedeelde atlassen en gebruik machten van twee voor WebGL builds.',
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
faq: [
|
|
190
|
+
{
|
|
191
|
+
question: 'Wat is een sprite sheet en waarom is het belangrijk?',
|
|
192
|
+
answer:
|
|
193
|
+
'Een sprite sheet is één afbeelding die meerdere animatie beelden bevat.',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
question: 'Hoe werkt de lokale verwerking in deze tool?',
|
|
197
|
+
answer:
|
|
198
|
+
'Alle verwerking vindt lokaal in uw browser plaats via de HTML5 Canvas API.',
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
question: 'Kan ik beelden uit een bestaande sprite sheet halen?',
|
|
202
|
+
answer:
|
|
203
|
+
'Ja. Schakel over naar de Extractor modus en stel de rastergrootte in.',
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
howTo: [
|
|
207
|
+
{
|
|
208
|
+
name: 'Bestanden Uploaden',
|
|
209
|
+
text: 'Sleep uw PNG of WebP bestanden naar de uploadzone.',
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: 'Instellingen Aanpassen',
|
|
213
|
+
text: 'Stel de afstand, rand extrusie en maximale grootte in.',
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: 'Controleren en Downloaden',
|
|
217
|
+
text: 'Bekijk de animatie in de speler en download het ZIP pakket.',
|
|
218
|
+
},
|
|
219
|
+
],
|
|
220
|
+
schemas: [
|
|
221
|
+
{
|
|
222
|
+
'@context': 'https://schema.org',
|
|
223
|
+
'@type': 'SoftwareApplication',
|
|
224
|
+
name: 'Sprite Sheet Packer en Extractor',
|
|
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: 'Wat is een sprite sheet en waarom is het belangrijk?',
|
|
240
|
+
acceptedAnswer: {
|
|
241
|
+
'@type': 'Answer',
|
|
242
|
+
text: 'Een sprite sheet is één afbeelding die meerdere animatie beelden bevat.',
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
'@context': 'https://schema.org',
|
|
249
|
+
'@type': 'HowTo',
|
|
250
|
+
name: 'Hoe sprite sheets in te pakken en te extraheren',
|
|
251
|
+
step: [
|
|
252
|
+
{
|
|
253
|
+
'@type': 'HowToStep',
|
|
254
|
+
name: 'Bestanden Uploaden',
|
|
255
|
+
text: 'Sleep uw PNG of WebP bestanden naar de uploadzone.',
|
|
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: 'pakowarka-i-ekstraktor-sprite-sheet',
|
|
6
|
+
title: 'Pakowarka i Ekstraktor Sprite Sheet',
|
|
7
|
+
description:
|
|
8
|
+
'Optymalizuj wydajność gier 2D, pakując pojedyncze klatki animacji w atlasy tekstur lub wyciągając klatki z istniejących arkuszy.',
|
|
9
|
+
ui: {
|
|
10
|
+
packerTab: 'Studio Pakowania',
|
|
11
|
+
extractorTab: 'Ekstraktor Sprite',
|
|
12
|
+
dropZoneTitle: 'Przeciągnij i Upuść Klatki',
|
|
13
|
+
dropZoneSubtitle: 'Prześlij obrazy PNG lub WebP, aby wygenerować zoptymalizowany atlas tekstur',
|
|
14
|
+
selectFilesButton: 'Wybierz Pliki Klatek',
|
|
15
|
+
clearAllButton: 'Wyczyść Obszar Róboczy',
|
|
16
|
+
downloadZipButton: 'Pobierz Paczkę (ZIP)',
|
|
17
|
+
copyJsonButton: 'Kopiuj JSON Atlasu',
|
|
18
|
+
downloadSheetPngButton: 'Pobierz Teksturę PNG',
|
|
19
|
+
paddingLabel: 'Odstęp Klatek (px)',
|
|
20
|
+
borderExtrusionLabel: 'Ekstruzja Krawędzi (px)',
|
|
21
|
+
maxTextureSizeLabel: 'Maksymalny Wymiar Tekstury',
|
|
22
|
+
powerOfTwoLabel: 'Wymuś Potęgę 2 (POT)',
|
|
23
|
+
trimTransparencyLabel: 'Przytnij Przeźroczystość',
|
|
24
|
+
exportFormatLabel: 'Docelowy Format Silnika',
|
|
25
|
+
presetPixelArt: 'Ustawienie Pixel Art 16x16',
|
|
26
|
+
presetHdUi: 'Ustawienie HD UI Atlas 1024',
|
|
27
|
+
presetMobile: 'Ustawienie Mobile WebGL 2048',
|
|
28
|
+
formatGenericHash: 'Ogólny JSON (Hash)',
|
|
29
|
+
formatGenericArray: 'Ogólny JSON (Array)',
|
|
30
|
+
formatUnity: 'Silnik Unity 2D',
|
|
31
|
+
formatGodot: 'Silnik Godot 2D',
|
|
32
|
+
formatPhaser: 'Silnik Phaser / PixiJS',
|
|
33
|
+
formatCss: 'CSS Web Frontend',
|
|
34
|
+
previewTitle: 'Podgląd Atlasu Tekstur',
|
|
35
|
+
efficiencyBadge: 'Wydajność Tekstury',
|
|
36
|
+
drawCallsBadge: 'Zredukowane Draw Calls',
|
|
37
|
+
totalFramesBadge: 'Spakowane Klatki',
|
|
38
|
+
textureSizeBadge: 'Wymiar Atlasu',
|
|
39
|
+
flipbookTitle: 'Odtwarzacz Animacji Flipbook',
|
|
40
|
+
flipbookFpsLabel: 'Prędkość Animacji (FPS)',
|
|
41
|
+
playAnimation: 'Odtwarzaj',
|
|
42
|
+
pauseAnimation: 'Wstrzymaj',
|
|
43
|
+
extractorModeGrid: 'Cięcie Według Siatki',
|
|
44
|
+
extractorModeAlpha: 'Automatyczne Cięcie Kanału Alfa',
|
|
45
|
+
frameWidthLabel: 'Szerokość Klatki (px)',
|
|
46
|
+
frameHeightLabel: 'Wysokość Klatki (px)',
|
|
47
|
+
marginLabel: 'Margines Zewnętrzny (px)',
|
|
48
|
+
spacingLabel: 'Odstęp Siatki (px)',
|
|
49
|
+
extractFramesButton: 'Wyciągnij Klatki',
|
|
50
|
+
extractedCountLabel: 'Wyciągnięte Sprity',
|
|
51
|
+
codeSnippetTitle: 'Kod Integracji z Silnikiem',
|
|
52
|
+
copySnippetButton: 'Kopiuj Kod',
|
|
53
|
+
copiedToast: 'Skopiowano do Schowka',
|
|
54
|
+
},
|
|
55
|
+
seo: [
|
|
56
|
+
{
|
|
57
|
+
type: 'title',
|
|
58
|
+
level: 2,
|
|
59
|
+
text: 'Zrozumienie Batchingu GPU i Optymalizacja Draw Calls w Silnikach 2D',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'paragraph',
|
|
63
|
+
html: 'Łączenie pojedynczych obrazów klatek w jeden atlas tekstury drastycznie zmniejsza liczbę poleceń rysowania przesyłanych z procesora CPU do karty graficznej GPU.',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: 'stats',
|
|
67
|
+
columns: 4,
|
|
68
|
+
items: [
|
|
69
|
+
{ value: '95%', label: 'Redukcja Draw Calls' },
|
|
70
|
+
{ value: '4x', label: 'Szybsze Przetwarzanie GPU' },
|
|
71
|
+
{ value: '60 FPS', label: 'Stabilna Płynność na Smartfonach' },
|
|
72
|
+
{ value: '100%', label: 'Lokalne Przetwarzanie w Przeglądarce' },
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
level: 2,
|
|
78
|
+
text: 'Porównanie Pojedynczych Plików z Połączonym Atlasem Tekstur',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'comparative',
|
|
82
|
+
columns: 2,
|
|
83
|
+
items: [
|
|
84
|
+
{
|
|
85
|
+
title: 'Pojedyncze Pliki Klatek',
|
|
86
|
+
description: 'Obrazy PNG lub WebP zapisane osobno',
|
|
87
|
+
points: [
|
|
88
|
+
'Generuje osobne polecenie rysowania dla każdej klatki na ekranie',
|
|
89
|
+
'Powoduje częste przełączanie kontekstu na karcie graficznej GPU',
|
|
90
|
+
'Zwiększa liczbę żądań HTTP w grach przeglądarkowych',
|
|
91
|
+
'Spadek płynności na urządzeniach mobilnych',
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
title: 'Spakowany Atlas Tekstury',
|
|
96
|
+
description: 'Pojedynczy plik PNG połączony z danymi JSON',
|
|
97
|
+
points: [
|
|
98
|
+
'Łączy setki klatek w jedno polecenie rysowania GPU',
|
|
99
|
+
'Maksymalizuje przepustowość pamięci graficznej VRAM',
|
|
100
|
+
'Zmniejsza liczbę pobieranych plików',
|
|
101
|
+
'Gwarantuje płynną animację na wszystkich platformach',
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'title',
|
|
108
|
+
level: 2,
|
|
109
|
+
text: 'Matematyka Ekstruzji Krawędzi i Ruch Subpikselowy',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'paragraph',
|
|
113
|
+
html: 'Dodanie 1 do 2 pikseli ekstruzji krawędzi powiela zewnętrzne piksele klatek, co zapobiega powstawaniu niepożądanych linii i szwów przy ruchu kamery.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'tip',
|
|
117
|
+
title: 'Strategia Ekstruzji Krawędzi',
|
|
118
|
+
html: 'Używaj ekstruzji krawędzi, aby całkowicie wyeliminować błędy pikselowe przy ruchu i przybliżaniu kamery.',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'title',
|
|
122
|
+
level: 2,
|
|
123
|
+
text: 'Zalecane Wymiary Tekstur dla Różnych Platform',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'table',
|
|
127
|
+
headers: ['Platforma Docelowa', 'Zalecany Maksymalny Wymiar', 'Wymóg Potęgi 2', 'Profil Pamięci'],
|
|
128
|
+
rows: [
|
|
129
|
+
['Przeglądarki Mobilne', '2048 x 2048 px', 'Wymagane w WebGL 1.0', 'Niska Przepustowość'],
|
|
130
|
+
['Komputery PC / Konsole', '4096 x 4096 px', 'Zalecane', 'Wysoka Wydajność GPU'],
|
|
131
|
+
['Konsolki Retro', '1024 x 1024 px', 'Ścisły Wymóg', 'Ścisłe Limity VRAM'],
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
type: 'proscons',
|
|
136
|
+
items: [
|
|
137
|
+
{
|
|
138
|
+
pro: 'Gwarantuje pełną kompatybilność ze starszymi sterownikami i WebGL 1.0',
|
|
139
|
+
con: 'Może pozostawiać pustą przestrzeń przy małej liczbie klatek',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
pro: 'Wspiera automatyczne generowanie mipmap sprzętowych',
|
|
143
|
+
con: 'Wymaga starannego ustawienia odstępów przy nieregularnych kształtach',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
pro: 'Optymalizuje alokację pamięci VRAM w karcie graficznej',
|
|
147
|
+
con: 'Niewielki wzrost początkowej powierzchni tekstury',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
level: 2,
|
|
154
|
+
text: 'Kluczowe Pojęcia Pakowania Sprite',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'glossary',
|
|
158
|
+
items: [
|
|
159
|
+
{
|
|
160
|
+
term: 'Draw Call',
|
|
161
|
+
definition: 'Polecenie wysyłane przez procesor CPU do karty graficznej GPU w celu wyrenderowania geometrii.',
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
term: 'Bin Packing',
|
|
165
|
+
definition: 'Algorytm optymalnego rozmieszczania prostokątnych elementów w minimalnym obszarze.',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
term: 'Border Extrusion',
|
|
169
|
+
definition: 'Powielanie zewnętrznych pikseli krawędzi w celu uniknięcia szwów widocznych przy ruchu kamery.',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
term: 'Flipbook Animation',
|
|
173
|
+
definition: 'Szybkie sekwencyjne odtwarzanie klatek w celu symulacji ciągłego ruchu w grach 2D.',
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
type: 'title',
|
|
179
|
+
level: 2,
|
|
180
|
+
text: 'Lista Kontrolna Optymalizacji',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
type: 'diagnostic',
|
|
184
|
+
variant: 'info',
|
|
185
|
+
title: 'Zasady Produkcyjne',
|
|
186
|
+
html: 'Grupuj animacje postaci w pojedyncze atlasy i stosuj potęgi dwójki dla eksportu WebGL.',
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
faq: [
|
|
190
|
+
{
|
|
191
|
+
question: 'Czym jest sprite sheet i dlaczego jest ważny w grach 2D?',
|
|
192
|
+
answer:
|
|
193
|
+
'Sprite sheet to pojedynczy plik graficzny zawierający wiele klatek animacji. Pozwala silnikowi gry wyrenderować wiele obiektów w jednym poleceniu GPU.',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
question: 'Jak działa przetwarzanie lokalne w tym narzędziu?',
|
|
197
|
+
answer:
|
|
198
|
+
'Wszystkie operacje wykonywane są w Twojej przeglądarce przy użyciu HTML5 Canvas API bez przesyłania plików na serwer.',
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
question: 'Czy mogę wyciągnąć klatki z istniejącego sprite sheeta?',
|
|
202
|
+
answer:
|
|
203
|
+
'Tak. Przejdź do trybu Ekstraktora, prześlij swój obraz i ustaw wymiary siatki cięcia.',
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
howTo: [
|
|
207
|
+
{
|
|
208
|
+
name: 'Prześlij Klatki',
|
|
209
|
+
text: 'Przeciągnij pliki PNG lub WebP do obszaru roboczego.',
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: 'Skonfiguruj Ustawienia',
|
|
213
|
+
text: 'Dostosuj odstępy, ekstruzję krawędzi oraz format silnika docelowego.',
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: 'Sprawdź i Pobierz',
|
|
217
|
+
text: 'Przetestuj animację w odtwarzaczu i pobierz paczkę ZIP.',
|
|
218
|
+
},
|
|
219
|
+
],
|
|
220
|
+
schemas: [
|
|
221
|
+
{
|
|
222
|
+
'@context': 'https://schema.org',
|
|
223
|
+
'@type': 'SoftwareApplication',
|
|
224
|
+
name: 'Pakowarka i 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: 'Czym jest sprite sheet i dlaczego jest ważny w grach 2D?',
|
|
240
|
+
acceptedAnswer: {
|
|
241
|
+
'@type': 'Answer',
|
|
242
|
+
text: 'Sprite sheet to pojedynczy plik graficzny zawierający wiele klatek animacji.',
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
'@context': 'https://schema.org',
|
|
249
|
+
'@type': 'HowTo',
|
|
250
|
+
name: 'Jak pakować i wyciągać klatki sprite sheet',
|
|
251
|
+
step: [
|
|
252
|
+
{
|
|
253
|
+
'@type': 'HowToStep',
|
|
254
|
+
name: 'Prześlij Klatki',
|
|
255
|
+
text: 'Przeciągnij pliki PNG lub WebP do obszaru roboczego.',
|
|
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
|
+
};
|