@docyrus/animaguru 0.6.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/NOTICE.md +256 -0
- package/README.md +241 -0
- package/dist/animaguru.js +27338 -0
- package/package.json +37 -0
- package/skills/animaguru/SKILL.md +115 -0
- package/skills/animaguru-advertising/SKILL.md +25 -0
- package/skills/animaguru-advertising/references/brand-bumper.md +11 -0
- package/skills/animaguru-advertising/references/comparison.md +11 -0
- package/skills/animaguru-advertising/references/creator-testimonial.md +11 -0
- package/skills/animaguru-advertising/references/editorial-advertorial.md +11 -0
- package/skills/animaguru-advertising/references/game-reward.md +11 -0
- package/skills/animaguru-advertising/references/offer-promotion.md +11 -0
- package/skills/animaguru-advertising/references/product-launch.md +11 -0
- package/skills/animaguru-advertising/references/product-proof.md +11 -0
- package/skills/animaguru-analog-film-tape/SKILL.md +29 -0
- package/skills/animaguru-analog-film-tape/references/recipe.md +23 -0
- package/skills/animaguru-animated-data-visualization/SKILL.md +39 -0
- package/skills/animaguru-animated-data-visualization/references/data-contract.md +16 -0
- package/skills/animaguru-animated-data-visualization/references/variants.md +17 -0
- package/skills/animaguru-art-deco-motion/SKILL.md +29 -0
- package/skills/animaguru-art-deco-motion/references/recipe.md +22 -0
- package/skills/animaguru-ascii-crt/SKILL.md +29 -0
- package/skills/animaguru-ascii-crt/references/recipe.md +22 -0
- package/skills/animaguru-blueprint-drafting/SKILL.md +29 -0
- package/skills/animaguru-blueprint-drafting/references/recipe.md +22 -0
- package/skills/animaguru-cartoon-character-animation/SKILL.md +35 -0
- package/skills/animaguru-cartoon-character-animation/references/variants.md +17 -0
- package/skills/animaguru-cutout-animation/SKILL.md +33 -0
- package/skills/animaguru-cutout-animation/references/production-recipe.md +37 -0
- package/skills/animaguru-cutout-animation/references/variants.md +17 -0
- package/skills/animaguru-cutout-animation/references/visual-style.md +34 -0
- package/skills/animaguru-dark-tech-stage/SKILL.md +29 -0
- package/skills/animaguru-dark-tech-stage/references/recipe.md +23 -0
- package/skills/animaguru-diagram-formula-motion/SKILL.md +36 -0
- package/skills/animaguru-diagram-formula-motion/references/variants.md +17 -0
- package/skills/animaguru-engraved-relief-print/SKILL.md +29 -0
- package/skills/animaguru-engraved-relief-print/references/recipe.md +24 -0
- package/skills/animaguru-flat-vector-motion/SKILL.md +35 -0
- package/skills/animaguru-flat-vector-motion/references/variants.md +17 -0
- package/skills/animaguru-general-video/SKILL.md +20 -0
- package/skills/animaguru-general-video/references/ambient-loop.md +11 -0
- package/skills/animaguru-general-video/references/music-lyrics.md +11 -0
- package/skills/animaguru-general-video/references/short-film.md +11 -0
- package/skills/animaguru-general-video/references/titles-event.md +11 -0
- package/skills/animaguru-general-video/references/visual-essay.md +11 -0
- package/skills/animaguru-generative-light-signal/SKILL.md +29 -0
- package/skills/animaguru-generative-light-signal/references/recipe.md +23 -0
- package/skills/animaguru-glass-mosaic/SKILL.md +29 -0
- package/skills/animaguru-glass-mosaic/references/recipe.md +23 -0
- package/skills/animaguru-halftone-editorial/SKILL.md +29 -0
- package/skills/animaguru-halftone-editorial/references/recipe.md +23 -0
- package/skills/animaguru-holographic-scan/SKILL.md +29 -0
- package/skills/animaguru-holographic-scan/references/recipe.md +22 -0
- package/skills/animaguru-interface-motion/SKILL.md +36 -0
- package/skills/animaguru-interface-motion/references/screen-mapping.md +16 -0
- package/skills/animaguru-interface-motion/references/variants.md +17 -0
- package/skills/animaguru-isometric-worlds/SKILL.md +35 -0
- package/skills/animaguru-isometric-worlds/references/variants.md +17 -0
- package/skills/animaguru-kinetic-typography/SKILL.md +35 -0
- package/skills/animaguru-kinetic-typography/references/variants.md +17 -0
- package/skills/animaguru-miniature-diorama/SKILL.md +29 -0
- package/skills/animaguru-miniature-diorama/references/recipe.md +23 -0
- package/skills/animaguru-painterly-depth-animation/SKILL.md +35 -0
- package/skills/animaguru-painterly-depth-animation/references/variants.md +17 -0
- package/skills/animaguru-paper-popup/SKILL.md +29 -0
- package/skills/animaguru-paper-popup/references/recipe.md +22 -0
- package/skills/animaguru-photo-footage-editorial/SKILL.md +29 -0
- package/skills/animaguru-photo-footage-editorial/references/recipe.md +23 -0
- package/skills/animaguru-pixel-art-animation/SKILL.md +36 -0
- package/skills/animaguru-pixel-art-animation/references/variants.md +17 -0
- package/skills/animaguru-portal-zoom/SKILL.md +29 -0
- package/skills/animaguru-portal-zoom/references/recipe.md +21 -0
- package/skills/animaguru-risograph-print/SKILL.md +29 -0
- package/skills/animaguru-risograph-print/references/recipe.md +23 -0
- package/skills/animaguru-sand-drawing/SKILL.md +29 -0
- package/skills/animaguru-sand-drawing/references/recipe.md +21 -0
- package/skills/animaguru-shadow-theatre/SKILL.md +29 -0
- package/skills/animaguru-shadow-theatre/references/recipe.md +23 -0
- package/skills/animaguru-silkscreen-poster/SKILL.md +29 -0
- package/skills/animaguru-silkscreen-poster/references/recipe.md +22 -0
- package/skills/animaguru-stop-motion-objects/SKILL.md +29 -0
- package/skills/animaguru-stop-motion-objects/references/recipe.md +23 -0
- package/skills/animaguru-studio-product-reveal/SKILL.md +29 -0
- package/skills/animaguru-studio-product-reveal/references/recipe.md +23 -0
- package/skills/animaguru-video/SKILL.md +79 -0
- package/skills/animaguru-whiteboard-line-drawing/SKILL.md +34 -0
- package/skills/animaguru-whiteboard-line-drawing/references/variants.md +17 -0
- package/templates/video/AGENTS.md +34 -0
- package/templates/video/CLAUDE.md +19 -0
- package/templates/video/README.md +101 -0
- package/templates/video/VIDEO-STYLE-NOTICES.txt +54 -0
- package/templates/video/film.config.json +10 -0
- package/templates/video/gitignore +11 -0
- package/templates/video/index.html +14 -0
- package/templates/video/package.json +28 -0
- package/templates/video/public/brand/logo-mark.svg +5 -0
- package/templates/video/scripts/build.mjs +12 -0
- package/templates/video/scripts/export-html.mjs +12 -0
- package/templates/video/scripts/export-mp4.mjs +209 -0
- package/templates/video/scripts/html-export-plugin.mjs +35 -0
- package/templates/video/scripts/html-export.mjs +54 -0
- package/templates/video/scripts/install-example.mjs +32 -0
- package/templates/video/scripts/review-analysis.mjs +29 -0
- package/templates/video/scripts/review-audio.mjs +24 -0
- package/templates/video/scripts/review.mjs +37 -0
- package/templates/video/scripts/starter-film.sha256 +1 -0
- package/templates/video/shared/locales/en/export.json +10 -0
- package/templates/video/shared/locales/en/film.json +42 -0
- package/templates/video/shared/locales/en/player.json +31 -0
- package/templates/video/shared/locales/en/style-studies.json +168 -0
- package/templates/video/shared/locales/en/timeline.json +33 -0
- package/templates/video/src/assets.ts +4 -0
- package/templates/video/src/download.ts +27 -0
- package/templates/video/src/exporter.ts +70 -0
- package/templates/video/src/film-resources.ts +29 -0
- package/templates/video/src/film.ts +132 -0
- package/templates/video/src/main.ts +219 -0
- package/templates/video/src/resource-timeline.ts +193 -0
- package/templates/video/src/review.ts +50 -0
- package/templates/video/src/studies/film.ts +26 -0
- package/templates/video/src/studies/media.ts +46 -0
- package/templates/video/src/studies/model.ts +60 -0
- package/templates/video/src/studies/pixi-renderer.ts +121 -0
- package/templates/video/src/studies/scenes.ts +410 -0
- package/templates/video/src/studies/timing.ts +53 -0
- package/templates/video/src/studies/variants.ts +39 -0
- package/templates/video/src/style.css +111 -0
- package/templates/video/src/timeline-model.ts +55 -0
- package/templates/video/style-source-provenance.json +11 -0
- package/templates/video/tsconfig.json +15 -0
- package/templates/video/vite.config.mjs +9 -0
- package/vendor/pixijs-skills/LICENSE +21 -0
- package/vendor/pixijs-skills/provenance.json +79 -0
- package/vendor/pixijs-skills/skills/pixijs/SKILL.md +66 -0
- package/vendor/pixijs-skills/skills/pixijs/references/index.md +136 -0
- package/vendor/pixijs-skills/skills/pixijs-accessibility/SKILL.md +224 -0
- package/vendor/pixijs-skills/skills/pixijs-application/SKILL.md +293 -0
- package/vendor/pixijs-skills/skills/pixijs-application/references/application-options.md +314 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/SKILL.md +303 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/background.md +137 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/bundles.md +122 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/caching.md +143 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/compressed-textures.md +120 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/fonts.md +205 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/gif.md +171 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/manifests.md +175 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/progress.md +142 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/resolution.md +142 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/spritesheet.md +119 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/svg.md +132 -0
- package/vendor/pixijs-skills/skills/pixijs-assets/references/video.md +158 -0
- package/vendor/pixijs-skills/skills/pixijs-blend-modes/SKILL.md +215 -0
- package/vendor/pixijs-skills/skills/pixijs-color/SKILL.md +299 -0
- package/vendor/pixijs-skills/skills/pixijs-core-concepts/SKILL.md +132 -0
- package/vendor/pixijs-skills/skills/pixijs-core-concepts/references/render-loop.md +216 -0
- package/vendor/pixijs-skills/skills/pixijs-core-concepts/references/renderers.md +287 -0
- package/vendor/pixijs-skills/skills/pixijs-create/SKILL.md +276 -0
- package/vendor/pixijs-skills/skills/pixijs-custom-rendering/SKILL.md +405 -0
- package/vendor/pixijs-skills/skills/pixijs-custom-rendering/references/advanced-gpu.md +244 -0
- package/vendor/pixijs-skills/skills/pixijs-custom-rendering/references/uniform-types.md +94 -0
- package/vendor/pixijs-skills/skills/pixijs-environments/SKILL.md +243 -0
- package/vendor/pixijs-skills/skills/pixijs-events/SKILL.md +387 -0
- package/vendor/pixijs-skills/skills/pixijs-filters/SKILL.md +300 -0
- package/vendor/pixijs-skills/skills/pixijs-html-source/SKILL.md +228 -0
- package/vendor/pixijs-skills/skills/pixijs-math/SKILL.md +489 -0
- package/vendor/pixijs-skills/skills/pixijs-migration-v8/SKILL.md +415 -0
- package/vendor/pixijs-skills/skills/pixijs-performance/SKILL.md +489 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-container/SKILL.md +345 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-core-concepts/SKILL.md +243 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-core-concepts/references/constructor-options.md +155 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-core-concepts/references/container-hierarchy.md +232 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-core-concepts/references/layers.md +145 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-core-concepts/references/masking.md +129 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-core-concepts/references/render-groups.md +140 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-core-concepts/references/scene-management.md +169 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-core-concepts/references/transforms.md +198 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-dom-container/SKILL.md +193 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-gif/SKILL.md +233 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-graphics/SKILL.md +576 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-mesh/SKILL.md +141 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-mesh/references/mesh-perspective.md +189 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-mesh/references/mesh-plane.md +159 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-mesh/references/mesh-rope.md +176 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-mesh/references/mesh-simple.md +144 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-mesh/references/mesh.md +213 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-particle-container/SKILL.md +323 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-sprite/SKILL.md +120 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-sprite/references/animated-sprite.md +262 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-sprite/references/nineslice-sprite.md +202 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-sprite/references/sprite.md +181 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-sprite/references/tiling-sprite.md +216 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-text/SKILL.md +136 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-text/references/bitmap-text.md +232 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-text/references/html-text.md +192 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-text/references/split-bitmap-text.md +187 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-text/references/split-text.md +168 -0
- package/vendor/pixijs-skills/skills/pixijs-scene-text/references/text.md +311 -0
- package/vendor/pixijs-skills/skills/pixijs-ticker/SKILL.md +292 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pixijs-ticker
|
|
3
|
+
description: "Use this skill when running per-frame logic or controlling the PixiJS v8 render loop. Covers Ticker.add/addOnce/remove, deltaTime vs deltaMS vs elapsedMS, UPDATE_PRIORITY ordering, maxFPS/minFPS capping, speed scaling, Ticker.shared vs new instances, per-object onRender hook, manual rendering. Triggers on: Ticker, UPDATE_PRIORITY, deltaTime, deltaMS, elapsedMS, onRender, app.ticker, maxFPS, minFPS, Ticker.shared."
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
`app.ticker` runs registered callbacks every frame and drives `app.render()` at `UPDATE_PRIORITY.LOW`. Each callback receives the Ticker instance; read `deltaTime` as a frame-rate-independent multiplier (≈1.0 at 60fps) or `deltaMS` for real-time calculations.
|
|
8
|
+
|
|
9
|
+
## Quick Start
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
app.ticker.add((ticker) => {
|
|
13
|
+
sprite.rotation += 0.01 * ticker.deltaTime;
|
|
14
|
+
sprite.x += (200 / 1000) * ticker.deltaMS;
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
app.ticker.add(
|
|
18
|
+
(ticker) => {
|
|
19
|
+
updatePhysics(ticker.deltaMS);
|
|
20
|
+
},
|
|
21
|
+
undefined,
|
|
22
|
+
UPDATE_PRIORITY.HIGH,
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
app.ticker.maxFPS = 30;
|
|
26
|
+
app.ticker.speed = 0.5;
|
|
27
|
+
|
|
28
|
+
sprite.onRender = () => {
|
|
29
|
+
sprite.scale.x = Math.sin(performance.now() / 500);
|
|
30
|
+
};
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Related skills:** `pixijs-application` (Application setup and sharedTicker option), `pixijs-performance` (frame rate optimization), `pixijs-migration-v8` (v7 ticker signature changes).
|
|
34
|
+
|
|
35
|
+
## Core Patterns
|
|
36
|
+
|
|
37
|
+
### Time units
|
|
38
|
+
|
|
39
|
+
The Ticker exposes three timing values, each for different use cases:
|
|
40
|
+
|
|
41
|
+
| Property | Type | Scaled by speed? | Capped by minFPS? | Use case |
|
|
42
|
+
| ----------- | ----------------------------- | ---------------- | ----------------- | -------------------------------------------- |
|
|
43
|
+
| `deltaTime` | dimensionless (~1.0 at 60fps) | yes | yes | Frame-rate-independent animation multipliers |
|
|
44
|
+
| `deltaMS` | milliseconds | yes | yes | Time-based calculations (pixels/sec) |
|
|
45
|
+
| `elapsedMS` | milliseconds | no | no | Raw measurement, profiling |
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
import { Application } from "pixi.js";
|
|
49
|
+
|
|
50
|
+
const app = new Application();
|
|
51
|
+
await app.init({ width: 800, height: 600 });
|
|
52
|
+
|
|
53
|
+
app.ticker.add((ticker) => {
|
|
54
|
+
// deltaTime: dimensionless scalar, ~1.0 at 60fps
|
|
55
|
+
sprite.rotation += 0.1 * ticker.deltaTime;
|
|
56
|
+
|
|
57
|
+
// deltaMS: real milliseconds (speed-scaled, capped)
|
|
58
|
+
sprite.x += (200 / 1000) * ticker.deltaMS; // 200 pixels per second
|
|
59
|
+
|
|
60
|
+
// elapsedMS: raw milliseconds (no scaling, no cap)
|
|
61
|
+
console.log(`Raw frame time: ${ticker.elapsedMS}ms`);
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Tension note:** `deltaTime` is not milliseconds. It is `deltaMS * Ticker.targetFPMS` where targetFPMS is 0.06 (i.e. 1/16.67). At exactly 60fps, deltaTime is 1.0. At 30fps, deltaTime is 2.0. This catches people who treat it as a time value.
|
|
66
|
+
|
|
67
|
+
### Priority ordering and context binding
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
import { Application, UPDATE_PRIORITY } from "pixi.js";
|
|
71
|
+
|
|
72
|
+
const app = new Application();
|
|
73
|
+
await app.init({ width: 800, height: 600 });
|
|
74
|
+
|
|
75
|
+
// INTERACTION (50) > HIGH (25) > NORMAL (0) > LOW (-25) > UTILITY (-50)
|
|
76
|
+
// app.render() is registered at LOW by the TickerPlugin
|
|
77
|
+
|
|
78
|
+
app.ticker.add(
|
|
79
|
+
(ticker) => {
|
|
80
|
+
// Physics runs before normal-priority callbacks
|
|
81
|
+
updatePhysics(ticker.deltaMS);
|
|
82
|
+
},
|
|
83
|
+
undefined,
|
|
84
|
+
UPDATE_PRIORITY.HIGH,
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
app.ticker.add((ticker) => {
|
|
88
|
+
// Default priority (NORMAL = 0), runs after HIGH but before render
|
|
89
|
+
updateAnimations(ticker.deltaTime);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Pass `this` as the second argument to preserve context on class methods
|
|
93
|
+
class GameSystem {
|
|
94
|
+
public speed = 5;
|
|
95
|
+
public position = 0;
|
|
96
|
+
|
|
97
|
+
public update(ticker: Ticker): void {
|
|
98
|
+
this.position += this.speed * ticker.deltaTime;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const system = new GameSystem();
|
|
103
|
+
app.ticker.add(system.update, system);
|
|
104
|
+
app.ticker.remove(system.update, system); // must match both fn and context
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Frame rate capping
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
import { Ticker } from "pixi.js";
|
|
111
|
+
|
|
112
|
+
const ticker = new Ticker();
|
|
113
|
+
|
|
114
|
+
ticker.maxFPS = 30; // Cap at 30fps (skips frames to maintain interval)
|
|
115
|
+
ticker.minFPS = 10; // Cap deltaTime so it never exceeds 10fps worth
|
|
116
|
+
|
|
117
|
+
// If maxFPS < minFPS, minFPS is lowered to match
|
|
118
|
+
// If minFPS > maxFPS, maxFPS is raised to match
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
`maxFPS` skips update calls to enforce a ceiling. `minFPS` caps deltaTime/deltaMS so large frame drops don't produce enormous deltas (default minFPS is 10).
|
|
122
|
+
|
|
123
|
+
### Per-object onRender hook
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
import { Sprite, Assets, Application } from "pixi.js";
|
|
127
|
+
|
|
128
|
+
const app = new Application();
|
|
129
|
+
await app.init({ width: 800, height: 600 });
|
|
130
|
+
|
|
131
|
+
const texture = await Assets.load("bunny.png");
|
|
132
|
+
const sprite = new Sprite(texture);
|
|
133
|
+
app.stage.addChild(sprite);
|
|
134
|
+
|
|
135
|
+
sprite.onRender = (renderer) => {
|
|
136
|
+
sprite.rotation += 0.01;
|
|
137
|
+
};
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`onRender` is called during scene graph traversal, before GPU rendering. It is an alternative to a global ticker callback when logic is tied to a specific display object.
|
|
141
|
+
|
|
142
|
+
### Ticker.shared, Ticker.system, and new Ticker
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
import { Ticker, UPDATE_PRIORITY } from "pixi.js";
|
|
146
|
+
|
|
147
|
+
// Ticker.shared: singleton, autoStart=true, protected from destroy()
|
|
148
|
+
const shared = Ticker.shared;
|
|
149
|
+
|
|
150
|
+
// Ticker.system: separate instance used by engine background tasks,
|
|
151
|
+
// independent of the main scene ticker. It's a plain Ticker instance
|
|
152
|
+
// (autoStart=true, _protected=true) with no intrinsic priority; listeners
|
|
153
|
+
// are typically added at UTILITY priority by convention.
|
|
154
|
+
const system = Ticker.system;
|
|
155
|
+
|
|
156
|
+
// new Ticker(): custom instance, autoStart=false, you manage the lifecycle
|
|
157
|
+
const custom = new Ticker();
|
|
158
|
+
custom.autoStart = true; // start when first listener is added
|
|
159
|
+
custom.add((ticker) => {
|
|
160
|
+
console.log(ticker.deltaMS);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
// One-shot callback that auto-removes after firing
|
|
164
|
+
custom.addOnce(() => console.log("fires once"), null, UPDATE_PRIORITY.NORMAL);
|
|
165
|
+
|
|
166
|
+
// When done:
|
|
167
|
+
custom.stop();
|
|
168
|
+
custom.destroy();
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
`Application` creates its own Ticker by default. Set `sharedTicker: true` in `app.init()` to use `Ticker.shared` instead. `Ticker.shared` and `Ticker.system` are both `_protected` and will not actually be destroyed if you call `destroy()` on them. Read `ticker.FPS` for the measured frame rate and `ticker.count` for the current listener count.
|
|
172
|
+
|
|
173
|
+
### App lifecycle and manual rendering
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
import { Application } from "pixi.js";
|
|
177
|
+
|
|
178
|
+
const app = new Application();
|
|
179
|
+
await app.init({ autoStart: false });
|
|
180
|
+
|
|
181
|
+
// Pause and resume the built-in render loop at any time.
|
|
182
|
+
app.start();
|
|
183
|
+
app.stop();
|
|
184
|
+
|
|
185
|
+
// Or drive the loop yourself (headless, visibility-gated, fixed timestep, etc.)
|
|
186
|
+
function animate() {
|
|
187
|
+
app.ticker.update(); // fires registered callbacks
|
|
188
|
+
app.render(); // renders the stage
|
|
189
|
+
requestAnimationFrame(animate);
|
|
190
|
+
}
|
|
191
|
+
animate();
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
`app.start()` and `app.stop()` are added by the `TickerPlugin` and map to `ticker.start()` / `ticker.stop()`. Use `autoStart: false` plus your own frame driver when you need to pause on tab blur, run a fixed-timestep loop, or render offscreen.
|
|
195
|
+
|
|
196
|
+
### Speed scaling
|
|
197
|
+
|
|
198
|
+
```ts
|
|
199
|
+
import { Application } from "pixi.js";
|
|
200
|
+
|
|
201
|
+
const app = new Application();
|
|
202
|
+
await app.init({ width: 800, height: 600 });
|
|
203
|
+
|
|
204
|
+
app.ticker.speed = 0.5; // Half speed (slow motion)
|
|
205
|
+
app.ticker.speed = 2.0; // Double speed
|
|
206
|
+
|
|
207
|
+
// speed affects deltaTime and deltaMS, but NOT elapsedMS
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## Common Mistakes
|
|
211
|
+
|
|
212
|
+
### [CRITICAL] Ticker callback expects delta as first argument
|
|
213
|
+
|
|
214
|
+
Wrong:
|
|
215
|
+
|
|
216
|
+
```ts
|
|
217
|
+
app.ticker.add((dt) => {
|
|
218
|
+
bunny.rotation += dt;
|
|
219
|
+
});
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Correct:
|
|
223
|
+
|
|
224
|
+
```ts
|
|
225
|
+
app.ticker.add((ticker) => {
|
|
226
|
+
bunny.rotation += ticker.deltaTime;
|
|
227
|
+
});
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
v8 passes the Ticker instance as the callback argument, not a delta number. The v7 pattern `(dt) => ...` compiles but `dt` is the entire Ticker object, so arithmetic on it produces `NaN`.
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
### [HIGH] Using updateTransform for per-frame logic
|
|
234
|
+
|
|
235
|
+
Wrong:
|
|
236
|
+
|
|
237
|
+
```ts
|
|
238
|
+
class MySprite extends Sprite {
|
|
239
|
+
updateTransform() {
|
|
240
|
+
super.updateTransform();
|
|
241
|
+
this.rotation += 0.01;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Correct:
|
|
247
|
+
|
|
248
|
+
```ts
|
|
249
|
+
class MySprite extends Sprite {
|
|
250
|
+
constructor() {
|
|
251
|
+
super();
|
|
252
|
+
this.onRender = this._onRender.bind(this);
|
|
253
|
+
}
|
|
254
|
+
private _onRender() {
|
|
255
|
+
this.rotation += 0.01;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
`updateTransform` was removed in v8. Use the `onRender` callback for per-object per-frame logic.
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
### [MEDIUM] Treating deltaTime as milliseconds
|
|
264
|
+
|
|
265
|
+
Wrong:
|
|
266
|
+
|
|
267
|
+
```ts
|
|
268
|
+
app.ticker.add((ticker) => {
|
|
269
|
+
// Tries to move 100px/sec but deltaTime is ~1.0, not ~16.67
|
|
270
|
+
sprite.x += (100 * ticker.deltaTime) / 1000;
|
|
271
|
+
});
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Correct:
|
|
275
|
+
|
|
276
|
+
```ts
|
|
277
|
+
app.ticker.add((ticker) => {
|
|
278
|
+
// Using deltaMS for time-based movement
|
|
279
|
+
sprite.x += (100 / 1000) * ticker.deltaMS;
|
|
280
|
+
// Or using deltaTime as a frame-rate multiplier
|
|
281
|
+
sprite.x += 1.5 * ticker.deltaTime;
|
|
282
|
+
});
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
`deltaTime` is a dimensionless scalar (~1.0 at 60fps), not milliseconds. Use `deltaMS` for real time calculations. Use `deltaTime` as a simple multiplier when you want "per frame at 60fps" behavior.
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
## API Reference
|
|
289
|
+
|
|
290
|
+
- [Ticker](https://pixijs.download/release/docs/ticker.Ticker.html.md)
|
|
291
|
+
- [TickerPlugin](https://pixijs.download/release/docs/app.TickerPlugin.html.md)
|
|
292
|
+
- [TickerPluginOptions](https://pixijs.download/release/docs/app.TickerPluginOptions.html.md)
|