参考:
Egret换装三种方式 CSDN (全局换装)
换装,主要是替换任意插槽的图片,来达到局部换装的目的。
游戏中可以只制作一个人物动画,然后局部替换100套衣服、100套发型或者100种眼睛。甚至可以把人和衣服所有插槽都换了。
下图替换了衣服。
一、创建一个测试骨骼动画
public armatureDisplay:dragonBones.EgretArmatureDisplay;
let factory = dragonBones.EgretFactory.factory;
factory.parseDragonBonesData(RES.getRes("test_ske_dbbin"));
factory.parseTextureAtlasData(RES.getRes("test_tex_json"), RES.getRes("test_tex_png"));
this.armatureDisplay = factory.buildArmatureDisplay(name);
this.addChild(this.armatureDisplay);}
二、封装的换装类
/**
* 替换插槽
* @param slotName 插槽名称 原材料
* @param textureName 图片名 xxx_png
* @param 偏移量
*/
public setNewSlot( slotName:string, textureName:string ,offsetX:number=0, offsetY:number=0){
var slot:dragonBones.Slot = this.armatureDisplay.armature.getSlot(slotName);
var b:egret.Bitmap = new egret.Bitmap();
b.texture = RES.getRes(textureName);
b.x = slot.display.x;
b.y = slot.display.y;
b.anchorOffsetX = b.width/2 + offsetX;
b.anchorOffsetY = b.height/2 + offsetY;
slot.setDisplay( b );
}
三、换装。替换人和手的插槽。
this.setNewSlot("人", "people_png");
this.setNewSlot("手", "hand_png");
四、全局换装
全局换装主要是使用replaceTexture来进行替换纹理图。
假设有两套皮肤分别是skin1.png和skin2.png,则两张图必须配置文件和图片位置都一样才能进行全局换装
let armatureDisplay:dragonBones.EgretArmatureDisplay;
let factory = dragonBones.EgretFactory.factory;
factory.parseDragonBonesData(RES.getRes("test_ske_dbbin"));
factory.parseTextureAtlasData(RES.getRes("test_tex_json"), RES.getRes("test_tex_png"));
armatureDisplay = factory.buildArmatureDisplay(name);
this.addChild(armatureDisplay);}
armatureDisplay.armatureDisplay.armature.replaceTexture(RES.getRes("skin1_png")); //皮肤1
armatureDisplay.armatureDisplay.armature.replaceTexture(RES.getRes("skin1_png")); //皮肤2