or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

animation.mdapplication.mdassets.mddisplay-objects.mdfilters.mdgraphics.mdindex.mdinteraction.mdmath.mdsprites-textures.mdtext.mdutilities.md

assets.mddocs/

0

# Asset Loading

1

2

Modern asset loading system with support for various formats, bundles, and caching strategies. The Assets API replaces the legacy PIXI.Loader with a more flexible and powerful approach.

3

4

## Capabilities

5

6

### Assets API

7

8

The main Assets class provides static methods for loading and managing assets.

9

10

```typescript { .api }

11

/**

12

* Modern asset loading system

13

*/

14

class Assets {

15

/**

16

* Load one or more assets

17

* @param urls - URLs or aliases to load

18

* @param onProgress - Progress callback

19

*/

20

static load<T = any>(urls: string | string[], onProgress?: (progress: number) => void): Promise<T>;

21

22

/**

23

* Load asset bundles

24

* @param bundleIds - Bundle IDs to load

25

* @param onProgress - Progress callback

26

*/

27

static loadBundle<T = any>(bundleIds: string | string[], onProgress?: (progress: number) => void): Promise<T>;

28

29

/**

30

* Get cached assets

31

* @param keys - Asset keys/aliases

32

*/

33

static get<T = any>(keys: string | string[]): T;

34

35

/**

36

* Unload assets and free memory

37

* @param urls - URLs or aliases to unload

38

*/

39

static unload(urls: string | string[]): Promise<void>;

40

41

/**

42

* Add assets to the resolver

43

* @param assets - Asset manifest or individual assets

44

*/

45

static add(assets: string | AssetsManifest | (string | AssetsManifest)[]): void;

46

47

/**

48

* Initialize the asset system

49

* @param options - Initialization options

50

*/

51

static init(options?: AssetsInitOptions): Promise<void>;

52

53

/**

54

* Set base path for assets

55

* @param basePath - Base path URL

56

*/

57

static setBasePath(basePath: string): void;

58

59

/**

60

* Check if asset is loaded

61

* @param key - Asset key/alias

62

*/

63

static has(key: string): boolean;

64

65

/**

66

* Get resolver instance

67

*/

68

static get resolver(): Resolver;

69

70

/**

71

* Get loader instance

72

*/

73

static get loader(): Loader;

74

75

/**

76

* Get cache instance

77

*/

78

static get cache(): Cache;

79

}

80

81

interface AssetsInitOptions {

82

/** Base path for all assets */

83

basePath?: string;

84

/** Asset manifest to load */

85

manifest?: AssetsManifest;

86

/** Texture preferences */

87

texturePreference?: {

88

/** Preferred resolution */

89

resolution?: number;

90

/** Preferred format */

91

format?: string[];

92

};

93

/** Enable detailed loading logs */

94

verbose?: boolean;

95

}

96

```

97

98

### Asset Manifests and Bundles

99

100

Organize assets into logical bundles for efficient loading.

101

102

```typescript { .api }

103

/**

104

* Asset manifest for organizing assets and bundles

105

*/

106

interface AssetsManifest {

107

/** List of asset bundles */

108

bundles?: AssetsBundle[];

109

/** Individual assets */

110

assets?: AssetsManifestEntry[];

111

}

112

113

/**

114

* Bundle of related assets

115

*/

116

interface AssetsBundle {

117

/** Bundle identifier */

118

name: string;

119

/** Assets in this bundle */

120

assets: AssetsManifestEntry[];

121

}

122

123

/**

124

* Individual asset entry

125

*/

126

interface AssetsManifestEntry {

127

/** Asset alias/key */

128

alias: string | string[];

129

/** Asset source URL(s) */

130

src: string | string[];

131

/** Additional asset data */

132

data?: {

133

/** Tags for filtering */

134

tags?: string[];

135

/** Resolution variants */

136

resolution?: number;

137

/** Format variants */

138

format?: string;

139

/** Load priority */

140

priority?: number;

141

};

142

}

143

```

144

145

**Usage Examples:**

146

147

```typescript

148

import { Assets } from "pixi.js";

149

150

// Simple asset loading

151

const texture = await Assets.load('https://example.com/image.png');

152

const sprite = new Sprite(texture);

153

154

// Load multiple assets

155

const assets = await Assets.load([

156

'https://example.com/player.png',

157

'https://example.com/enemy.png',

158

'https://example.com/background.jpg'

159

]);

160

161

// With progress tracking

162

const textures = await Assets.load(['image1.png', 'image2.png'], (progress) => {

163

console.log(`Loading progress: ${Math.round(progress * 100)}%`);

164

});

165

166

// Using asset manifest

167

const manifest = {

168

bundles: [

169

{

170

name: 'game-assets',

171

assets: [

172

{ alias: 'player', src: 'sprites/player.png' },

173

{ alias: 'enemy', src: 'sprites/enemy.png' },

174

{ alias: 'background', src: 'images/bg.jpg' }

175

]

176

},

177

{

178

name: 'ui-assets',

179

assets: [

180

{ alias: 'button', src: 'ui/button.png' },

181

{ alias: 'panel', src: 'ui/panel.png' }

182

]

183

}

184

]

185

};

186

187

Assets.add(manifest);

188

await Assets.loadBundle('game-assets');

189

190

// Access loaded assets

191

const playerTexture = Assets.get('player');

192

const enemyTexture = Assets.get('enemy');

193

```

194

195

### Resolver System

196

197

The resolver handles asset URL resolution and format selection.

198

199

```typescript { .api }

200

/**

201

* Resolves asset URLs and selects appropriate formats

202

*/

203

class Resolver {

204

/** Base path for all assets */

205

basePath: string;

206

207

/**

208

* Add assets to resolver

209

* @param assets - Assets to add

210

*/

211

add(assets: string | ResolverManifest | (string | ResolverManifest)[]): void;

212

213

/**

214

* Resolve asset URL

215

* @param key - Asset key

216

*/

217

resolve(key: string): ResolvedAsset;

218

219

/**

220

* Check if asset exists

221

* @param key - Asset key

222

*/

223

hasKey(key: string): boolean;

224

225

/**

226

* Remove asset from resolver

227

* @param key - Asset key

228

*/

229

remove(key: string): void;

230

231

/**

232

* Set preferences for asset resolution

233

* @param preferences - Resolution preferences

234

*/

235

setPreferences(preferences: ResolverPreferences): void;

236

237

/**

238

* Get all resolved assets

239

*/

240

getAll(): Record<string, ResolvedAsset>;

241

242

/**

243

* Reset resolver

244

*/

245

reset(): void;

246

}

247

248

interface ResolvedAsset {

249

/** Asset alias */

250

alias: string[];

251

/** Resolved URL */

252

src: string;

253

/** Asset format */

254

format: string;

255

/** Load priority */

256

priority: number;

257

/** Additional data */

258

data: any;

259

}

260

261

interface ResolverPreferences {

262

/** Preferred resolution */

263

resolution?: number;

264

/** Preferred formats in order */

265

format?: string[];

266

}

267

268

interface ResolverManifest {

269

[key: string]: string | {

270

src: string | string[];

271

format?: string;

272

resolution?: number;

273

priority?: number;

274

data?: any;

275

};

276

}

277

```

278

279

### Loader System

280

281

The core loading functionality with extensible parsers.

282

283

```typescript { .api }

284

/**

285

* Core asset loader with parser system

286

*/

287

class Loader extends EventEmitter {

288

/**

289

* Load assets

290

* @param assetsToLoad - Assets to load

291

* @param onProgress - Progress callback

292

*/

293

load<T>(assetsToLoad: string | ResolvedAsset | (string | ResolvedAsset)[], onProgress?: (progress: number) => void): Promise<T>;

294

295

/**

296

* Unload assets

297

* @param assetsToUnload - Assets to unload

298

*/

299

unload(assetsToUnload: string | ResolvedAsset | (string | ResolvedAsset)[]): Promise<void>;

300

301

/**

302

* Add parser for specific asset types

303

* @param parser - Parser to add

304

*/

305

static addParser(parser: LoaderParser): void;

306

307

/**

308

* Remove parser

309

* @param parser - Parser to remove

310

*/

311

static removeParser(parser: LoaderParser): void;

312

}

313

314

/**

315

* Parser interface for handling specific asset types

316

*/

317

interface LoaderParser {

318

/** Parser name */

319

name: string;

320

/** File extensions this parser handles */

321

extension: string | string[];

322

/** Test function to determine if parser should handle asset */

323

test?: (url: string, resolved: ResolvedAsset) => boolean;

324

/** Load function */

325

load: (url: string, asset: ResolvedAsset, loader: Loader) => Promise<any>;

326

/** Unload function */

327

unload?: (asset: any) => void;

328

}

329

```

330

331

### Cache System

332

333

Asset caching for performance optimization.

334

335

```typescript { .api }

336

/**

337

* Asset cache for storing loaded assets

338

*/

339

class Cache extends EventEmitter {

340

/**

341

* Set asset in cache

342

* @param key - Cache key

343

* @param asset - Asset to cache

344

*/

345

set(key: string, asset: any): void;

346

347

/**

348

* Get asset from cache

349

* @param key - Cache key

350

*/

351

get<T = any>(key: string): T;

352

353

/**

354

* Check if asset exists in cache

355

* @param key - Cache key

356

*/

357

has(key: string): boolean;

358

359

/**

360

* Remove asset from cache

361

* @param key - Cache key

362

*/

363

remove(key: string): boolean;

364

365

/**

366

* Get all cached assets

367

*/

368

getAll(): Record<string, any>;

369

370

/**

371

* Clear all cached assets

372

*/

373

clear(): void;

374

375

/**

376

* Get cache keys

377

*/

378

getKeys(): string[];

379

380

/**

381

* Reset cache

382

*/

383

reset(): void;

384

}

385

```

386

387

**Usage Examples:**

388

389

```typescript

390

import { Assets, Cache } from "pixi.js";

391

392

// Cache management

393

const texture = await Assets.load('player.png');

394

console.log(Cache.has('player.png')); // true

395

396

// Manual cache operations

397

Cache.set('custom-data', { score: 100, level: 5 });

398

const gameData = Cache.get('custom-data');

399

400

// Clear specific assets

401

Cache.remove('old-texture');

402

403

// Clear all cache

404

Cache.clear();

405

```

406

407

### Advanced Loading Patterns

408

409

```typescript

410

// Resolution-aware loading

411

Assets.setPreferences({

412

resolution: window.devicePixelRatio,

413

format: ['webp', 'png', 'jpg']

414

});

415

416

// Add resolution variants

417

Assets.add({

418

alias: 'hero',

419

src: [

420

'hero@1x.png',

421

'hero@2x.png',

422

'hero@3x.png'

423

]

424

});

425

426

// Bundle-based loading with dependencies

427

const gameManifest = {

428

bundles: [

429

{

430

name: 'preload',

431

assets: [

432

{ alias: 'loading-bar', src: 'ui/loading.png' },

433

{ alias: 'logo', src: 'ui/logo.png' }

434

]

435

},

436

{

437

name: 'level-1',

438

assets: [

439

{ alias: 'level1-bg', src: 'levels/level1/bg.jpg' },

440

{ alias: 'level1-tileset', src: 'levels/level1/tiles.png' },

441

{ alias: 'level1-music', src: 'audio/level1.mp3' }

442

]

443

},

444

{

445

name: 'characters',

446

assets: [

447

{ alias: 'player-idle', src: 'sprites/player/idle.json' },

448

{ alias: 'player-run', src: 'sprites/player/run.json' },

449

{ alias: 'enemy-basic', src: 'sprites/enemies/basic.png' }

450

]

451

}

452

]

453

};

454

455

// Initialize with manifest

456

await Assets.init({ manifest: gameManifest });

457

458

// Load preload assets first

459

await Assets.loadBundle('preload');

460

461

// Show loading screen, then load game assets

462

const loadingPromises = [

463

Assets.loadBundle('level-1'),

464

Assets.loadBundle('characters')

465

];

466

467

await Promise.all(loadingPromises);

468

469

// Assets are now available

470

const playerTexture = Assets.get('player-idle');

471

const backgroundTexture = Assets.get('level1-bg');

472

```

473

474

### Format Support

475

476

PixiJS supports various asset formats through built-in and extensible parsers:

477

478

```typescript

479

// Image formats

480

await Assets.load('image.png'); // PNG

481

await Assets.load('image.jpg'); // JPEG

482

await Assets.load('image.webp'); // WebP

483

await Assets.load('image.svg'); // SVG

484

485

// Spritesheet formats

486

await Assets.load('sprites.json'); // TexturePacker JSON

487

await Assets.load('atlas.xml'); // XML atlas

488

489

// Font formats

490

await Assets.load('font.woff2'); // Web fonts

491

await Assets.load('bitmap-font.fnt'); // Bitmap fonts

492

493

// Audio formats (with additional plugins)

494

await Assets.load('music.mp3'); // MP3

495

await Assets.load('sound.wav'); // WAV

496

497

// Video formats

498

await Assets.load('video.mp4'); // MP4

499

await Assets.load('video.webm'); // WebM

500

501

// JSON data

502

await Assets.load('data.json'); // JSON data

503

504

// Custom formats via parsers

505

Loader.addParser({

506

name: 'custom-parser',

507

extension: 'custom',

508

load: async (url) => {

509

const response = await fetch(url);

510

return await response.text();

511

}

512

});

513

```

514

515

## Performance Best Practices

516

517

```typescript

518

// Preload critical assets

519

const criticalAssets = ['ui-skin', 'player-spritesheet', 'level1-bg'];

520

await Assets.load(criticalAssets);

521

522

// Load bundles progressively

523

await Assets.loadBundle('preload');

524

showLoadingScreen();

525

await Assets.loadBundle('game-core');

526

hideLoadingScreen();

527

528

// Background loading of future content

529

Assets.loadBundle('level-2').then(() => {

530

console.log('Level 2 assets ready');

531

});

532

533

// Unload unused assets to free memory

534

await Assets.unload(['old-level-assets', 'unused-textures']);

535

536

// Use appropriate formats

537

// - WebP for modern browsers with fallbacks

538

// - Compressed textures for mobile

539

// - Multiple resolutions for different DPI

540

```