为什么cc.show和cc.hide动画控制不了一个节点的显示隐藏?

将一个节点active设置为false后,show和hide动画无法控制其显示隐藏?我应该怎么做?

show和hide应该是修改node的opacity来实现的,active是node的激活状态,如果你的node没有激活,那么不不管你对node做了什么操作,你都是看不到node的

你是要渐变的显示和隐藏还是立刻的显示和隐藏?

如果是渐变的话,可以用动画编辑器创建opacity属性动画,或者在脚本里用cc.fadeOut渐变隐藏,cc.fadeIn渐变显示,本质上也是通过修改node的opacity属性来实现的

如果你需要立刻显示或者立刻隐藏

1.直接通过node.active = true 来显示, node.active = false 来隐藏,但是active = false 的情况下,引擎不再主动调用这个节点,节点下面的组件的计时器或者其他引擎主动调用的操作会全部失效

2.直接修改node.opacity = 0 来隐藏,node.opacity = 255显示,这里只是修改节点的不透明度,所以没有其他影响

2赞

多谢~~但我还不是很了解。
先说下我的目的吧:实现一个Node的出现动画和消失动画。出现前和消失后物体都处于隐藏。
那么,出现前的动画确实可以先通过设置node.active=true来实现。
但是,出现后的动画我该如何在动画结束的地方隐藏Node呢?
另外,如果cc.show和cc.hide不是控制Node的显示和隐藏,那这动画名字起得是不是有点不合理呀?

node.active的true、false控制就可以啊,我有一个场景就是这么控制两个动画的显示或消失,动画是spine动画。

你可以把node当作你的电脑显示器,creator引擎是你的电脑主机,active是你的显示开关,opacity是你的显示器亮度,active = false的情况下,就相当于把你显示器给关了,但是opacity = 0只是把显示器亮度调到最低看不见,看不见不代表你的显示器没有运行(你依然可以靠着记忆设置显示器的各项设置,也可以通过电脑主机对显示器进行任何操作)

cc.hide就是把node的opacity设置为0(相当于把显示器亮度设置为0,设置为0的前提是你显示器是开启状态,也就是node.active = true的情况下,cc.show也是同理),虽然你看不见,但是引擎仍然可以调用这个node(比如node下的计时器,update,onEnabled,onDisbled以及动画等等,就像电脑主机(creator)依然可以设置显示器的亮度,色彩,分辨率等等,只是你看不见而已),

但是active就是直接把显示器关闭了,这个时候主机(creator)或者你自己还能设置显示器的亮度吗?肯定不能啊,所以你调用cc.hide和cc.show就没用啊(但是你依然可以手动调用node进行任何操作,就像你显示器关闭了,你依然可以更换显示器屏幕,更换显示器灯管,但是显示器关闭状态下你肯定看不到效果,就像node.active = false下你依然可以手动修改node的任意属性,但是你看不到效果)

不知道这样说能不能理解,active是node的开关,hide和show只是改变node的不透明度,你节点都失效了,肯定hide和show没用了

关键在于你node隐藏以后,你还需不需要node被引擎调用(计时器,生命周期回掉等等操作),如果需要,就用hide,如果不需要,直接node.active = false就行了,反正最后效果都是节点看不到了,但是隐藏和开关不是一回事:joy:

还有cc.hide和cc.show严格来说不属于动画,而是属于动作(不要问我有啥区别,我也不知道:joy:

2赞

太有想象力的比喻了

:joy: 脑洞大开

:+1:太赞了!!!!比喻挺好的,基本了解了。感谢呀!!
我对show和hide还想再请教下:
假设hide仅仅是设置了opacity=0,那么这个节点还绘制吗?另外,如果这个节点是按钮的话还会响应点击消息吗?
传统界面意义上的hide,应该就是不绘制也不响应消息吧?这里的active是这个意思吗?是的话有什么瞬间动作可以设置active吗?

我也不知道会不会绘制,这个你要问问官方的大神@zilong 但是按钮的话是会响应的,因为node是激活状态,能够被引擎调用,以及响应操作

cocos里的hide好像就只是看不到而已,而不是没有了,active = false就 相当于 node没有了,只有node没有了才不会绘制,也不会响应消息,没有什么动作能设置active,你可以直接通过node.active 来直接设置

刚看了下,应该不是这个原因,show,hide是改变visible的值,不是opacity的值,不执行是因为下面的图里标出来的,因为active的判断,active为false,(hide)就不执行了


不过这里应该有问题,show,hide好像就不能用了。。。

是不能用了,creator为啥不添加个setVisible()的方法