假如一个守门员需要做出向左,向右的动作,但动画编辑器只能对一个节点做动画。
你是说向左的同时又向右吗?这个应该做不到
如果你说的是一个node需要多个动画的话,你在资源管理器鼠标右键新建clip,然后后添加到node下面的animation组件的clip数组里,然后就可以在动画编辑器编辑各个动画了
我的意思是根据球的位置做动画反应,谢谢神盾局
你添加多个clip,然后根据自定义条件来选择播放哪一个就行了啊
不知道是不是没有理解到你的意思?
一个node可以有一个Animation组件,一个Animation组件里可以有多个Clips,默认播放Default Clip。每个Clip里可以编辑一个动画,动画编辑器左下角可以切换当前编辑的Clip。比如有两个Clip,叫left和right,
node.getComponent(cc.Animation).play(‘left’)
node.getComponent(cc.Animation).play(‘right’)
我是在做完一个图向右移动的时候,希望添加同一张图向左的动画,结果发现只能修改,不能添加,我是用另一张图实现的向左的动画。
一个节点下的一张是不是只能实现一个动画?图的相矛盾的动画只能用另一张相同的图实现。
额,我还是不知道你是什么意思
我猜一下
1.一个球员的sprite在向右移动,向右移动完成之后,再向左移动
2.向右移动的同时又向左移动
你是想要那种?
(弱弱的说一下,描述尽量详细一点,比如你说的只能修改,不能添加,什么东西只能修改不能添加?,比如什么一个节点下的一张是不是只能实现一个动画,我都看不懂
,尽量用creator里的术语来描述,比如cc.Animation只能修改clip,不能添加clip,比如一个节点是不是只能播放一个clip)
或者你直接说你想要达到的效果也行
我以前没有编程语言的基础的,4月才开始自学,术语不怎么会说,不好意思,不过以后我会尽力让自己规范化的。我在一个脚本写了一个监听事件,希望随机发送数字,(足球踢了出去)
onTouchEnded: function (touch, event) { // 点击事件结束处理
this.move(this.node.x,this.node.y);
var i = Math.floor(Math.random())
this.node.emit(‘i’);
}.bind(self)
另一个脚本,监听,收到随机数字,然后播放动画。(守门员的反应,向左或者向右扑球)
onLoad: function () {
this.ball.on(‘0’,this.play,this)
this.ball.on(‘1’,this.play1,this)
},
play:function(){
this.getComponent(cc.Animation).play(this.AnimName)
},
play1:function(){
this.getComponent(cc.Animation).play(this.AnimName2)
}
没关系,慢慢来,我也只比你早几个月自学
从你代码来看应该是你想要的效果啊,现在是哪里有问题呢?
0和1收不到,
var i = Math.floor(Math.random())
this.node.emit(‘i’);
这段应该有问题,虽然我可以加条件判断发送0或1,但我还是希望随机发送0,1
首先,on和emit都是node的成员方法,也就是你在哪个node发送的事件,只有这个node才能接收到,所以你this.node.emit()发送的事件只有this.node才能收到,所以你在this.ball上添加监听是收不到的
其次
这里你实际上发送的是事件名称为“i”的事件,而不是以变量i的值为事件名称的事件(事件名为“0”或者“1”),你并没有监听事件名为“i”的事件(你只监听了事件名为“0”和事件名为“1”的事件),如果你想发送以变量i的值为事件名称的事件,应该这样
this.node.emit(i + “”);
这样发送的事件就是“0”事件或者“1”事件
还有你也不必监听两次,只需要像这样
监听:
this.node.on(‘out’,this.play,this)
play: function (event) {
if(event.detail.rand == 0){
//向左(或者向右)
}else if(event.detail.rand == 1){
//向右(或者向左)
}
}
发送事件:
var r = Math.floor(cc.random0To1())
this.node.emit("out", {rand: r});
当然我没有测试过,你试试看
[quote=“atmy, post:11, topic:38961”]
首先,on和emit都是node的成员方法,也就是你在哪个node发送的事件,只有这个node才能接收到,所以你this.node.emit()发送的事件只有this.node才能收到,所以你在this.ball上添加监听是收不到的
[/quote]我是在ball发送事件的,所以是this.node,然后我把ball作为组件的,放在了运动员上,所以是this.ball监听。
我按照你的方法试了,好像只能接受为0的事件。
哦哦,可能你代码只贴了一部分,所以我理解错了
不如你做个简单的demo我帮你看看吧,这样来的快一点
我代码也写的不怎么样,所以没什么可以指教的
问题的原因是在ball.js里第35行,获取随机数那里
Math.floor是向下取整,也就是去掉小数部分(好像是这样的,比如随机数是0.6,Math.floor(0.6) 的返回值就是0),改成四舍五入
Math.round(cc.random0To1())
就可以了
谢谢神盾局,
这虽然是16年的贴子,但是我也忍不住回一下,怕别人搜到,没有答案。
为什么多个clip不能编辑,只能编辑一个,是因为切换clip的下拉菜单在界面底下,很容易被windows状态栏挡住,别问我为什么知道,我才知道。
感谢你
哈哈哈我20-22年 都经常忘