不知何故,我在 AnimatedSprite 帧的顶部得到了一个额外的小工件。我很确定它是上面包装的精灵的底部。我认为我的精灵表 PNG 已关闭,所以我使用 TexturePacker 分解并重新组装精灵表。虽然我使用的 spritesheet JSON 与 TexturePacker 生成的不一样,但坐标匹配。我什至尝试用纹理打包器版本中的内容替换一些帧。
这是最后一帧的 JSON 删节——顶部有一条虚线:
{
"meta": {
"image": "slime3.png",
"size": {"w":288,"h":160},
"scale": "1"
},
"frames": {
"slime_pink_die_1": {
"frame": {"x":256,"y":128,"w":32,"h":32},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":32,"h":32},
"sourceSize": {"w":32,"h":32}
}
}
}
这是它的加载方式:
const slimecolors = ['pink'];
const slimeActions = [{name:'die',frames:1}];
slimecolors.forEach(slimeColor => {
const slimeActionTextures = [];
slimeActions.forEach(action => {
const actionTextures = [];
for (let j = 0; j < action.frames; j++) {
const texture = Texture.from(`slime_${slimeColor}_${action.name}_${j + 1}`);
actionTextures.push(texture);
}
slimeActionTextures.push(actionTextures);
});
const slime = new AnimatedSprite(slimeActionTextures[0]);
slime.actions = slimeActionTextures;
slime.x = (this.screen.width-128) * Math.random() + 64;
slime.y = (this.screen.height-128) * Math.random() + 64;
slime.dx = 2 * Math.random() * Math.sign(Math.random() - 0.5);
slime.dy = 2 * Math.random() * Math.sign(Math.random() - 0.5);
slime.scale.set(1 + (2 * Math.random()));
slime.animationSpeed = 0.25;
slime.gotoAndPlay(Math.random() * 4);
this.slimes.push(slime);
this.stage.addChild(this.slimes.slice(-1)[0]);
});
(这里是PIXI.Application 的一个实例)。
顶行的精灵没有这个神器,这就是我重新打包的原因。