使用animateCC做动画时,需要注意的几件事(持续更新)
熟悉我的人都知道我基本不接跳帧类型的外包,哪怕只是简单的换皮,为什么呢?除了这是一个苦力活,对自身没有提升外,更重要的原因是,做跳帧类型的项目是需要程序员和动画师进行约束的,如果动画师只管自己做动画,不和程序员约束规则的话,程序员使用动画师的动画是非常难受的,还很容易出莫名的BUG,然而,跳帧外包往往是动画已经做好,让你写程序,或者干脆是让你把flash改成H5,所以做起来就比预想的麻烦很多,很多时候你需要自己重新处理一遍动画,有点类似于动画重构了。针对这种情况,我今天就在这里写出几个用animateCC做动画时要注意的几件事。
新手注意这条:animateCC元件命名分为 库名 和实例名 一般可以直接被代码控制的是实例名。库名也可以被代码控制 但是需要new一下。实例名和库名很多新手会搞混。
实际上不写类链接直接new库名也可以生成对象 类链接主要是为了规范和不放在舞台也可以导出(所以很多人看我的fla舞台空的以为这个fla有问题,其实东西都在库里……)。
好了接下来介绍注意事项:
1.如果元件一开始就需要被代码控制 元件第一侦就必须要存在 设置不显示就行了
2.透明度为0的元件无法被点击,所以如果要做透明按钮需要把不透明度设置为1%
3.中途切换原件 名字相同并不能被操控 所以一个元件里不能有2个元件命名同一名字(实例名)
下面和上面重复了,这样的命名是不行,代码操作不到后面的元件
4.文件名和库名不要相同,不同元件的类链接名不要和别的库名相同,同一个元件的库名和类链接名可以相同。
5.fla中 在不同文件夹里文件名也要不同 不然同名元件会被重命名 动画有可能会被混淆 导出来的图片 也有可能混淆(主要发生在替换资源的时候 因为存入的先后时间改了 系统重命名是根据存入时间命名的)
6.图片设置为影片剪辑以后再做补间,不然会出现2个图形元件,之后改起来就很不方便,而且导出代码也会变多。
7.把所有元件设置为影片剪辑而不是图形 虽然图形也可以做动画 但是不能被命名 一旦这个元件你突然发现需要操控了 你需要把每一帧都改成影片建议 修改帧数多的动画就是一个很恶心麻烦的过程。
8.老生常谈的一个问题了 gotoandplay不成功 如果你们的程序不专业 那么请把跳侦动画放到第二帧 不要放第一侦 因为元件第一侦需要初始化 这时候跳侦不成功 如果你们程序员专业的话 第一侦也没事让他们自行延时触发 或者autoReset设置为false
9.一定保证不同的fla中不同图片的名字不同,但是都要用到相同的图片时名字要相同(这个我加橙色高亮 这个一般动画师肯定不会注意 导致多个fla导出来的资源覆盖掉 或者2个一样的图片加载好几遍) 因为这样导出的时候不会覆盖 相同的图片也不会被加载两遍
10.库里导入的素材不要随便和别的素材对调名字 这也会出问题 没错就是这么bug
11.png和jpg发布的时候不要和在一起,也不要太大,这都会造成文件过大程序加载慢运行慢的bug,不懂的人就按照下面的图设置
12.分离(俗称打散)与合并资源到sprite表功能不要一起用,一起用了打散的部分不会显示,实在要一起用打散的素材转为位图。
13.如果用到多个fla,请修改命名空间,下图红框中的名字每个fla都要不一样,如果是2018以上的版本只需要通过每个fla的adobeid重新获取lib,image,ss就可以了。
重新获取lib:
var comp=AdobeAn.getComposition("43DF86047014BD45A6E625D22FE1B4C1");//id看导出的js
var ss=comp.getSpriteSheet();
var lib=comp.getLibrary();
var images=comp.getImages();
//上面所有的命名跟红框一样 红框没有的区分开就可以了
14.做动画时主要时间轴做成一条,这个条件乍听之下很难懂,其实就是最好你一个stop就可以停下全部动画,装饰性的动画除外,比如动画暂停的时候光效可以继续,但是跟动画进度有关的动画全部要在一个stop停止,如果你做成了多个动画进度,要让程序员知道要停止哪个动画就很难了,而且这样子动画师后续改动画,程序员就需要重新改程序。
15.同样的动画效果不要在父子上一起做,不仅容易误导程序员,性能还会很糟糕,比如淡入淡出效果,你父子元件一起做了,这时候程序写了停止动画,结果还是没停止,这时候找问题可就找死人了。
16.需要本地双击打开项目的人,请好好看看这篇文章:
以上的注意事项或者说是约束,一定要严格遵守,否则写出来的程序会出很多莫名的bug,好了暂时就想到那么多,之后还会有持续更新……
匿名
调透明度也太蠢了点。。用visible调不好吗
ajex
@匿名 很多新手不会代码的
匿名
🙄
nil
前辈,我刚才又看到你的另外一片文章,其中提到:”最后讲个BUG,由于movieclip的机制,第一帧是在初始化,所以第一帧上写代码可能会无效,解决办法就是写在第二帧,或者setTimeout后再写代码。“我试了一下,将Scene1中的this.instance_name.gotoAndPlay(2);放到第二帧上就可以了!(原来在第一帧)这是不是就是因为第一帧要用于初始化呢。。。可是AS3好像就没这个问题。。。
但第二个问题还是等待前辈指教。。。如何从MovieClip中控制外面的Scene1舞台时间轴播放某一帧?多谢多谢!
ajex
@nil exportRoot.gotoAndPlay
nil
大侠,终于找到ANCC+CreateJS的高手了!我以前也是做Flash的,对AS3还算了解一些,但是现在用了ANCC,AS3要换成JS总是遇到很多问题。。。比如我现在用this.instance_name.gotoAndPlay(2);就是不会播放(第一帧放this.stop();),不知道是不是你第8点说到的那样。。。
另外还有个问题,我在MovieClip中动画播放结束后,希望能控制Scene1的时间轴继续播放,怎么弄从MovieClip中控制最外面的Scene1呢?原来Flash中是通过MovieClip(this.root)实现的。。。
提前谢过了!还望不吝赐教!