运行 PIXI.JS 中的动画循环
Running an animated loop in PIXI.JS
我正在尝试创建一个倒瓶动画,循环播放 5 个不同的瓶子,每个瓶子都是横向的,倒出的液体量不同。我正在尝试显示第一个瓶子,然后在 60 毫秒后显示第二个,然后在 60 毫秒后显示第三个,依此类推。我需要移除前一瓶并将下一瓶添加到完全相同的位置。我想知道最简洁的方法是什么,我尝试过几个 setTimout 函数,但代码有一些错误而且一点也不简洁。我已经研究了 PIXI.Timer 但我很难理解如何设置 5 个不同的精灵并循环遍历它们。如果您有任何想法或方向,请告诉我。我将 post 我的函数与下面使用的 setTimout:
setTimeout(() => {
let pour1Texture = new PIXI.Texture.from(require('@/assets/items/bottle/pouring/pouring bottle1.png'))
let pour1 = new PIXI.Sprite.from(pour1Texture)
sprites.push(pour1)
pour1.position.x = 438;
pour1.position.y = -40;
labBenchComponent.pixiApp.stage.addChild(
pour1
);
},1000)
setTimeout(() => {
labBenchComponent.pixiApp.stage.removeChild(sprites.pop())
const pour2Texture = new PIXI.Texture.from(require('@/assets/items/bottle/pouring/pouring bottle2.png'))
const pour2 = new PIXI.Sprite.from(pour2Texture)
pour2.position.x = 438;
pour2.position.y = -10;
sprites.push(pour2)
labBenchComponent.pixiApp.stage.addChild(
pour2
);
}, 1000)
setTimeout(() => {
labBenchComponent.pixiApp.stage.removeChild(sprites.pop())
const pour3Texture = new PIXI.Texture.from(require('@/assets/items/bottle/pouring/pouring bottle2.png'))
const pour3 = new PIXI.Sprite.from(pour3Texture)
pour3.position.x = 438;
pour3.position.y = 10;
sprites.push(pour3)
labBenchComponent.pixiApp.stage.addChild(
pour3
);
}, 1000)
我明白了。不要使用勾号,而是使用 PIXI.AnimatedSprite,如下所示:
import * as PIXI from 'pixi.js-legacy';
export default function pourBottle() {
let textureArray = [];
for (let i = 0; i < 5; i++)
{
let texture = {
texture: PIXI.Texture.from(require(`@/assets/items/bottle/pouring/pouring bottle${i+1}.png`)),
time: 100,
};
textureArray.push(texture);
};
let animatedSprite = new PIXI.AnimatedSprite(textureArray);
return animatedSprite;
}
我正在尝试创建一个倒瓶动画,循环播放 5 个不同的瓶子,每个瓶子都是横向的,倒出的液体量不同。我正在尝试显示第一个瓶子,然后在 60 毫秒后显示第二个,然后在 60 毫秒后显示第三个,依此类推。我需要移除前一瓶并将下一瓶添加到完全相同的位置。我想知道最简洁的方法是什么,我尝试过几个 setTimout 函数,但代码有一些错误而且一点也不简洁。我已经研究了 PIXI.Timer 但我很难理解如何设置 5 个不同的精灵并循环遍历它们。如果您有任何想法或方向,请告诉我。我将 post 我的函数与下面使用的 setTimout:
setTimeout(() => {
let pour1Texture = new PIXI.Texture.from(require('@/assets/items/bottle/pouring/pouring bottle1.png'))
let pour1 = new PIXI.Sprite.from(pour1Texture)
sprites.push(pour1)
pour1.position.x = 438;
pour1.position.y = -40;
labBenchComponent.pixiApp.stage.addChild(
pour1
);
},1000)
setTimeout(() => {
labBenchComponent.pixiApp.stage.removeChild(sprites.pop())
const pour2Texture = new PIXI.Texture.from(require('@/assets/items/bottle/pouring/pouring bottle2.png'))
const pour2 = new PIXI.Sprite.from(pour2Texture)
pour2.position.x = 438;
pour2.position.y = -10;
sprites.push(pour2)
labBenchComponent.pixiApp.stage.addChild(
pour2
);
}, 1000)
setTimeout(() => {
labBenchComponent.pixiApp.stage.removeChild(sprites.pop())
const pour3Texture = new PIXI.Texture.from(require('@/assets/items/bottle/pouring/pouring bottle2.png'))
const pour3 = new PIXI.Sprite.from(pour3Texture)
pour3.position.x = 438;
pour3.position.y = 10;
sprites.push(pour3)
labBenchComponent.pixiApp.stage.addChild(
pour3
);
}, 1000)
我明白了。不要使用勾号,而是使用 PIXI.AnimatedSprite,如下所示:
import * as PIXI from 'pixi.js-legacy';
export default function pourBottle() {
let textureArray = [];
for (let i = 0; i < 5; i++)
{
let texture = {
texture: PIXI.Texture.from(require(`@/assets/items/bottle/pouring/pouring bottle${i+1}.png`)),
time: 100,
};
textureArray.push(texture);
};
let animatedSprite = new PIXI.AnimatedSprite(textureArray);
return animatedSprite;
}