v5 Custom Application GameLoop - zlq4863947/pixi.js-cn GitHub Wiki
Pixi JS v5引入了应用程序插件,但是大多数人更喜欢制作自己的应用程序类和gameloop。
本文的所有代码都可以在我们的示例页面中复制
Default Application
对于 Hello World
应用程序和简单演示,我们有特殊的 Application
类mashup。 这样,我们可以忽略所有初始化问题,并得出以下结论:
// 初始化application
var app = new PIXI.Application({ width: 800, height: 600, backgroundColor: 0x1099bb });
document.body.appendChild(app.view);
// 初始化精灵
var sprite = PIXI.Sprite.fromImage('required/assets/basics/bunny.png');
sprite.anchor.set(0.5);
sprite.position.set(app.screen.width/2, app.screen.height/2);
sprite.interactive = true;
sprite.buttonMode = true;
sprite.on('pointerdown', function() {
sprite.scale.x *= 1.25;
sprite.scale.y *= 1.25;
});
app.stage.addChild(sprite);
app.ticker.add(function(delta) {
sprite.rotation += 0.1 * delta;
});
Custom application
要获得更多控制权,您可以手动设置所需的所有插件。 在这种情况下,我们可以设置ticker
插件。
To have more control, you can manually setup all the plugins you need. In this case we setup ticker
plugin.
// 初始化 renderer 和 ticker
var renderer = new PIXI.Renderer({ width: 800, height: 600, backgroundColor: 0x1099bb });
document.body.appendChild(renderer.view);
var stage = new PIXI.Container();
// 初始化 ticker
var ticker = new PIXI.Ticker();
ticker.add(() => {
renderer.render(stage);
}, PIXI.UPDATE_PRIORITY.LOW);
ticker.start();
// 初始化精灵
var sprite = PIXI.Sprite.fromImage('required/assets/basics/bunny.png');
sprite.anchor.set(0.5);
sprite.position.set(renderer.screen.width/2, renderer.screen.height/2);
sprite.interactive = true;
sprite.buttonMode = true;
sprite.on('pointerdown', function() {
sprite.scale.x *= 1.25;
sprite.scale.y *= 1.25;
});
stage.addChild(sprite);
ticker.add(function(delta) {
sprite.rotation += 0.1 * delta;
});
Custom GameLoop
有些应用程序需要更多控制。 让我们直接调用requestAnimationFrame。
// 初始化 renderer 和 ticker
var renderer = new PIXI.Renderer({ width: 800, height: 600, backgroundColor: 0x1099bb });
document.body.appendChild(renderer.view);
var stage = new PIXI.Container();
// 初始化 RAF
var oldTime = Date.now();
requestAnimationFrame(animate);
function animate() {
var newTime = Date.now();
var deltaTime = newTime - oldTime;
oldTime = newTime;
if (deltaTime < 0) deltaTime = 0;
if (deltaTime > 1000) deltaTime = 1000;
var deltaFrame = deltaTime * 60 / 1000; //1.0 用于单帧
// 在这更新你的游戏
sprite.rotation += 0.1 * deltaFrame;
renderer.render(stage);
requestAnimationFrame(animate);
}
// 初始化精灵
var sprite = PIXI.Sprite.fromImage('required/assets/basics/bunny.png');
sprite.anchor.set(0.5);
sprite.position.set(renderer.screen.width/2, renderer.screen.height/2);
sprite.interactive = true;
sprite.buttonMode = true;
sprite.on('pointerdown', function() {
sprite.scale.x *= 1.25;
sprite.scale.y *= 1.25;
});
stage.addChild(sprite);