L'API Assets est le chargeur, le résolveur et le cache d'assets de PixiJS en un seul singleton. Utilisez-la pour charger des textures, vidéos, spritesheets, polices, JSON et autres ressources avec détection de format, commutation de résolution, groupement de bundles, suivi de progression et nettoyage GPU.
Démarrage rapide
await Assets.init({ basePath: "/static/" });
const texture = await Assets.load("bunny.png");
const sprite = new Sprite(texture);
app.stage.addChild(sprite);
const [hero, enemy] = await Assets.load(["hero.png", "enemy.png"]);
await Assets.load({
alias: "logo",
src: "logo.webp",
});
const logo = new Sprite(Assets.get("logo"));
Assets.init() est optionnel mais recommandé pour définir basePath, texturePreference ou un manifest. Après l'init, appelez Assets.load() avec une URL, un alias, un tableau ou un UnresolvedAsset ; les assets résolus sont mis en cache et re-résolus par Assets.get().
Types de fichiers supportés
| Type | Extensions | Parser ID | Loader |
|---|---|---|---|
| Textures | .png, .jpg, .jpeg, .webp, .avif |
texture |
loadTextures |
| SVG | .svg |
svg |
loadSvg (voir references/svg.md) |
| Textures vidéo | .mp4, .m4v, .webm, .ogg, .ogv, .h264, .avi, .mov |
video |
loadVideoTextures (voir references/video.md) |
| Spritesheets | .json (format Spritesheet) |
spritesheet |
spritesheetAsset (voir references/spritesheet.md) |
| Polices bitmap | .fnt, .xml |
bitmap-font |
loadBitmapFont (le chargement fonctionne par défaut ; le rendu de BitmapText nécessite 'pixi.js/text-bitmap' ; voir references/fonts.md) |
| Polices web | .ttf, .otf, .woff, .woff2 |
web-font |
loadWebFont (voir references/fonts.md) |
| JSON | .json |
json |
loadJson |
| Texte | .txt |
text |
loadTxt |
| Textures compressées | .basis, .dds, .ktx, .ktx2 |
basis, dds, ktx, ktx2 |
Voir references/compressed-textures.md |
| GIFs animés | .gif |
gif |
Nécessite 'pixi.js/gif' ; retourne GifSource (voir references/gif.md) |
La colonne Parser ID est la valeur que vous passez au champ parser de niveau supérieur sur un descripteur d'asset pour forcer un chargeur spécifique. Voir « Forcer un parser » ci-dessous.
Forcer un parser avec parser
Par défaut, PixiJS choisit un chargeur en correspondant l'extension de fichier ou le type MIME. Quand votre URL n'a pas d'extension (URLs CDN signées, blob URLs, endpoints API, chemins avec hash de contenu), le résolveur ne peut pas dire au chargeur quoi faire. Définissez le champ parser de niveau supérieur sur le descripteur d'asset pour forcer un chargeur spécifique :
// URL CDN signée sans extension
const texture = await Assets.load({
src: "https://cdn.example.com/signed/abc123?token=xyz",
parser: "texture",
});
// Endpoint API qui retourne du JSON
const data = await Assets.load({
alias: "config",
src: "https://api.example.com/v1/config",
parser: "json",
});
// URL de police sans extension avec famille explicite
await Assets.load({
src: "https://cdn.example.com/fonts/hero-v2",
parser: "web-font",
data: { family: "Hero", weights: ["400", "700"] },
});
// Flux vidéo sans extension de fichier
const clipTexture = await Assets.load({
src: "https://cdn.example.com/stream/xyz",
parser: "video",
data: { mime: "video/mp4", muted: true, playsinline: true },
});
Le champ parser va au niveau supérieur du descripteur d'asset (aux côtés de src et data), pas à l'intérieur de data. Il prend n'importe quel Parser ID du tableau « Types de fichiers supportés » ci-dessus :
'texture','svg','video': textures image, SVG et vidéo'json','text': JSON et texte brut'web-font','bitmap-font': polices web et bitmap'spritesheet': JSON d'atlas de textures'gif': GIFs animés (nécessite'pixi.js/gif')'basis','dds','ktx','ktx2': textures compressées (chacun nécessite son import side-effect)
Quand vous en avez besoin
- URLs CDN signées :
https://cdn.example.com/get?id=abc123n'a pas d'extension que le chargeur peut tester. - Blob ou ObjectURL :
URL.createObjectURL(blob)produit des URLsblob:...sans extension. - Routage personnalisé :
/api/assets/hero-v2où le serveur décide du type de contenu. - Chemins avec hash de contenu sans suffixe : certains pipelines de build produisent des noms comme
/static/abc123defau lieu de/static/abc123def.png.
Si l'URL a une extension, vous n'avez pas besoin de parser ; laissez la détection automatique faire son travail. Définissez parser uniquement quand la détection ne peut pas fonctionner.
loadParser est déprécié
Le champ loadParser de v7 fonctionne toujours mais émet un avertissement de dépréciation. Utilisez parser pour le nouveau code.
// Ancien (déprécié)
await Assets.load({ src: "...", loadParser: "loadTextures" });
// Nouveau
await Assets.load({ src: "...", parser: "texture" });
Sujets
Chaque workflow d'asset est couvert dans un fichier de référence. Choisissez celui qui correspond à votre question :
| Sujet | Référence | Quand |
|---|---|---|
| Atlas de textures et animations | references/spritesheet.md | Chargement de spritesheets avec AnimatedSprite |
| Textures vidéo | references/video.md | .mp4, .webm, autoplay, boucle, mobile |
| Polices web et bitmap | references/fonts.md | .woff2, .fnt, familles de polices, polices SDF |
| GIFs animés | references/gif.md | .gif, GifSprite, contrôle de lecture |
| Groupement d'assets par fonctionnalité | references/bundles.md | addBundle, loadBundle, unloadBundle |
| Déclaration complète en amont | references/manifests.md | Workflows Assets.init({ manifest }) |
| Lookups de cache et nettoyage | references/caching.md | Assets.get, Assets.unload, Cache |
| Préchargement d'assets futurs | references/background.md | backgroundLoad, backgroundLoadBundle |
| Écrans de chargement | references/progress.md | onProgress, progression LoadOptions |
| Formats compressés GPU | references/compressed-textures.md | .ktx2, .basis, .dds, .ktx |
| SVG vecteur vs raster | references/svg.md | parseAsGraphicsContext, mode texture |
| Détection Retina + format | references/resolution.md | @{1,2}x, préférences format |
Guide de décision
- Besoin de charger une seule image ? Utilisez
Assets.load(url). Aucune configuration requise. - Chargement de nombreux assets groupés par niveau/scène ? Utilisez un bundle. Voir
references/bundles.md. - Tous les assets connus au moment du build ? Utilisez un manifest dans
Assets.init. Voirreferences/manifests.md. - Besoin d'une barre de progression ? Passez un callback de progression à
Assets.load. Voirreferences/progress.md. - Transitions fluides entre les niveaux ? Préchargez le niveau suivant en arrière-plan. Voir
references/background.md. - Le budget mémoire compte ? Utilisez les textures compressées et
Assets.unloadentre les écrans. Voirreferences/compressed-textures.mdetreferences/caching.md. - Besoin d'icônes SVG nets à n'importe quelle taille ? Chargez en Graphics, pas en texture. Voir
references/svg.md. - Retina + WebP/AVIF ? Configurez
texturePreferenceet utilisez des motifs de format. Voirreferences/resolution.md.
Options de chargement et gestion des erreurs
Il y a deux concepts distincts « d'options » lors du chargement d'assets :
LoadOptions: le deuxième argument deAssets.load/loadBundle. Contrôle la récupération d'erreurs, les tentatives, la progression et les callbacks d'achèvement sur tout un chargement.data: un champ sur chaque descripteur d'asset. Transfère les options spécifiques du parser (mode d'échelle, résolution, famille de police, drapeaux autoplay, etc.) au chargeur spécifique de cet asset.
LoadOptions (par appel)
await Assets.load(["hero.png", "enemy.png"], {
onProgress: (p) => updateBar(p),
onError: (err, url) => {
const src = typeof url === "string" ? url : url.src;
console.warn("failed:", src, err);
},
strategy: "retry",
retryCount: 3,
retryDelay: 250,
});
onProgress(progress):[0, 1]au fur et à mesure que les assets de l'appel se complètent.onError(error, url):urleststring | ResolvedAsset. Protégez avant de lire.src; quandurlest une chaîne,.srcest undefined.strategy: 'throw' | 'skip' | 'retry'— par défaut'throw'.'skip'résout avec tous les assets réussis ;'retry'rétente les assets échoués.retryCount— par défaut3, tentatives par asset quandstrategyest'retry'.retryDelay— par défaut250ms entre les tentatives.
Les défauts globaux vivent sur Loader.defaultOptions, ou passez loadOptions à Assets.init().
Options data (par asset)
Chaque parser de chargeur lit ses propres options du champ data sur le descripteur d'asset. Utilisez le tableau ci-dessous pour choisir les bonnes options pour chaque type d'asset :
| Type d'asset | Forme data |
Options clés | Référence |
|---|---|---|---|
| Texture (image) | TextureSourceOptions |
resolution, scaleMode, alphaMode, autoGenerateMipmaps, antialias, addressMode |
references/resolution.md |
| SVG | { parseAsGraphicsContext?, resolution? } |
parseAsGraphicsContext pour le mode Graphics ; resolution pour un raster plus net |
references/svg.md |
| Vidéo | VideoSourceOptions |
autoPlay, loop, muted, playsinline, preload, updateFPS, crossorigin, mime |
references/video.md |
| Police web | LoadFontData |
family, weights, style, display, unicodeRange, featureSettings |
references/fonts.md |
| Police bitmap | (aucune ; auto-configurée) | La détection de distance-field définit le mode d'échelle et les mipmaps | references/fonts.md |
| Spritesheet | { texture?, imageFilename?, ignoreMultiPack?, textureOptions?, cachePrefix? } |
textureOptions transfère TextureSourceOptions (ex. scaleMode) à l'image de l'atlas ; texture pour ignorer le chargement d'image ; imageFilename pour redéfinir l'image référencée ; ignoreMultiPack pour ignorer les suivis multi-pack ; cachePrefix pour préfixer les frames |
references/spritesheet.md |
| GIF | GifBufferOptions |
fps, scaleMode, resolution, autoGenerateMipmaps |
references/gif.md |
| Texture compressée | TextureSourceOptions |
scaleMode, addressMode, autoGenerateMipmaps |
references/compressed-textures.md |
| JSON / Texte | (aucune) | Retourné tel quel | — |
Exemple combinant LoadOptions et data :
await Assets.load(
{
alias: "hero",
src: "hero.png",
data: { scaleMode: "nearest", resolution: 2 },
},
{ strategy: "retry", retryCount: 3 },
);
À l'intérieur d'un manifest ou d'un bundle, chaque entrée peut porter ses propres data :
await Assets.init({
manifest: {
bundles: [
{
name: "level1",
assets: [
{ alias: "tiles", src: "tiles.png", data: { scaleMode: "nearest" } },
{ alias: "font", src: "hero.woff2", data: { family: "Hero" } },
{
alias: "clip",
src: "intro.mp4",
data: { autoPlay: false, muted: true },
},
],
},
],
},
});
Configuration à l'exécution
Assets.init(options) accepte, aux côtés de basePath et manifest :
defaultSearchParams— string ouRecord<string, any>ajouté à chaque URL résolue. Utile pour l'invalidation de cache.skipDetections: boolean— ignorer la détection de format du navigateur pour un init plus rapide. Nécessite untexturePreference.formatexplicite.bundleIdentifier: BundleIdentifierOptions— personnaliser comment les clés de bundle se résolvent afin que le même alias puisse vivre dans plusieurs bundles.loadOptions: Partial<LoadOptions>— définir lestrategy,retryCount,retryDelayet les callbacks par défaut pour chaque appelAssets.loadsuivant.preferences: Partial<AssetsPreferences>—crossOrigin,preferWorkers,preferCreateImageBitmap,parseAsGraphicsContext.
Après l'init, les préférences peuvent toujours être ajustées :
Assets.setPreferences({
crossOrigin: "anonymous",
preferCreateImageBitmap: false,
});
for (const detection of Assets.detections) {
console.log(detection.extension);
}
Assets.reset();
Assets.setPreferences(preferences)— pousser les nouvelles préférences vers chaque parser qui les supporte.Assets.detections— getter exposant la listeFormatDetectionParserenregistrée ; utilisez pour inspecter quels formats l'environnement actuel annonce.Assets.reset()— réinitialisation interne complète (résolveur + chargeur + cache). Destiné aux tests afin qu'unAssets.initfrais puisse s'exécuter.
Erreurs courantes
[CRITIQUE] Utiliser Texture.from(url) pour charger
Incorrect :
const texture = Texture.from("https://example.com/image.png");
Correct :
const texture = await Assets.load("https://example.com/image.png");
En v8, Texture.from() ne lit que le cache. Il ne récupère pas depuis une URL. Utilisez d'abord Assets.load() ; la valeur retournée est la texture elle-même.
[ÉLEVÉE] Utiliser la signature positionnelle Assets.add
Incorrect :
Assets.add("bunny", "bunny.png");
Correct :
Assets.add({ alias: "bunny", src: "bunny.png" });
La forme Assets.add(key, url) positionnelle a été supprimée en v8. Utilisez l'objet options avec les propriétés alias et src.
[ÉLEVÉE] Ne pas décharger les textures entre les niveaux
Assets.load() met les textures en cache indéfiniment. Pour les jeux basés sur les niveaux ou les écrans avec des ensembles d'assets distincts, appelez Assets.unloadBundle() lors de la transition pour libérer la mémoire GPU.