如何获取animation的node节点?

参考图示,ani文件load成animation之后 ,我想在代码里面获取node节点并且修改属性,有什么方法,貌似animation对象里面获取不到任何子节点。
QQ图片20190215092758.png
已邀请:

甜豆

赞同来自: 1556109104用户

别在目录里直接创建animation,如果你是要换图的话就在prefab里用动画编辑模式做动画

nevercai

赞同来自:

虽然可以直接Hack,但不建议这样做。
应该考虑修改设计,为什么需要或许动画下面的节点。是不是可以考虑分成多个动画。
 
非要访问的话,可以尝试遍历 aniObj["_targetDic"],断点调试一下。

AerTims

赞同来自:

之前我也尝试过去获取某个属性修改动画纹理,但是并不能行得通
我最终解决方案如下:
effect.png

在动画做好的情况下直接复制动画生成动画模板,在代码中通过name属性区分动画来实现相同动画不同纹理的效果(play函数第三个参数),这种方法会增加动画文件的大小别的没有影响。
 

ippon

赞同来自:

在Layabox2中不需要自己创建node啊,node是Laya.display对象的基类,
而且在2.0里面已经使用场景Scene替代了view和dialog,如果你比较过创建后的Scene、view和dialog,它们的文件后缀都是scene
在场景的层级面板中,你可以选中任意节点,然后右键点击,在弹出菜单中选创建2D-->Animotion,这样就可以直接创建成功了。
然后在属性面板中定义Animotion的name,就可以用getChildByName来调用了。
下面的截图是我项目中的层级关系,你可以参考一下

微信图片_20190221132007.png

 

达尔文

赞同来自:

let skillPNGLoaded = function() {
// 根据动画配置文件读取图集中的位图切片,根据不同类型的配置文件,根据配置文件结构修改
let skillAniArray = [];
for(let i in aniProps.mc[options.srcName].frames) {
let skill = new Laya.Sprite(); // 创建一个用于存放位图数组的临时精灵
let texture = Laya.loader.getRes(options.srcPath+options.srcName+".png"); // 读取图集生成大切片
let textureIns = Laya.Texture.create(texture,
aniProps.res[aniProps.mc[options.srcName].frames[i].res].x,
aniProps.res[aniProps.mc[options.srcName].frames[i].res].y,
aniProps.res[aniProps.mc[options.srcName].frames[i].res].w,
aniProps.res[aniProps.mc[options.srcName].frames[i].res].h,
); // 从大切片切出小切片
skill.graphics.drawTexture(textureIns,aniProps.mc[options.srcName].frames[i].x,aniProps.mc[options.srcName].frames[i].y); // 将小切片渲染到临时精灵上
skillAniArray[i] = skill._graphics._one; // 储存渲染后的小切片备用
Laya.timer.once(10, this, function () {
try{
ani._frames[i]._one = skillAniArray[i]; // 将渲染后的小切片追加到动画中
}catch(e) {
console.log('warning: animation in loading'); // 过于频繁加载动画时给予警告
}
})
}
ani.interval = Math.round(1000/aniProps.mc[options.srcName].frameRate); // 设置动画的帧率
ani.autoPlay = options.autoPlay; // 设置动画是否自动播放
};

给个hack参考,只要相同帧数的一种动画类型定义一个.ani就行了,比如roleWeapon_8f.ani(玩家武器的8帧动画),每帧的图片可以用一个透明文件占个位。

要回复问题请先

商务合作
商务合作