上一节我们把基本的工程已经搭建起来了,并且写下了我们的第一行代码。相信你对于creator基本的操作以及Sprite已经有了一定的了解。
接下来,我们通过Prefab开始实现游戏中最为重要的配角——鱼。
动手之前,我们还是先了解一下制作需求:
我们需要鱼在场景中不停的左右匀速移动,同时可以对鱼的移动速度进行配置。
首先把各种各样鱼的资源导入到工程中,这里我准备了10条不同的鱼,类似这样
注意,我们是高级厨师,对于做菜的原材料还是要有一定的要求的,这个要求就是——美术规范的统一。统一会让你在编码获得极大的便利。假设美术狗们随心所欲,这些鱼的朝向各式各样的话,那程序猿们就得写上一大堆毫无意义的代码用来调整它们的方向,而这个工作对于美术狗来说,只需要额外耗费不到3秒钟的时间。
废话说完,我们在场景中创建一个Sprite,把鱼的资源放上去。同时创建一个新的JavaScript脚本,挂载到Sprite上。打开脚本并编辑代码:
start () {
let action = cc.sequence(
cc.moveTo(5,320,this.node.y),//向右移动
cc.flipX(true),//翻转X
cc.moveTo(5,-320,this.node.y),//向左移动
cc.flipX(false)//翻转X
);
this.node.runAction(cc.repeatForever(action));//重复运动
},
关于动作,参考官方教程以及API:
http://docs.cocos.com/creator/manual/zh/scripting/actions.html 官方教程
http://docs.cocos.com/creator/manual/zh/scripting/action-list.html 动作API
OK让我们现在来看一下效果
OK,基本符合预期,不过还有个细节问题需要处理。有没有注意到一开始的运动速度,和后面的速度好像有点不一致哦。原因起始很简单,第一段移动的路程和后面移动的路程不一致,而我们设定的移动时间是相同的,因此速度上面就有了差异。
当让你可以告诉策划同学,你已经完成了功能开发了,但这样的话,我敢保证,你有100%的概率可以看到策划同学默默的拿出40m的大刀。
等等,把刀放下,我们再优化优化代码…… = =!。
start () {
let x = this.node.x;
let duration = 5 - (this.node.x + 320) / 640 * 5;
let action = cc.sequence(
cc.moveTo(duration,320,this.node.y),
cc.flipX(true),//翻转X
cc.moveTo(duration,x,this.node.y),
cc.moveTo(5 - duration,-320,this.node.y),
cc.flipX(false),//翻转X
cc.moveTo(5 - duration,x,this.node.y),
);
this.node.runAction(cc.repeatForever(action));//重复运动
},
这样就没问题了!
接下来处理速度问题。
首先我们给鱼增加一个属性Speed,用来控制鱼的速度。
properties: {
mSpeed : {
default : 1,
type : cc.Float,
tooltip : "鱼的速度,默认正常速度为1,最小值为0.1,最大值为10",
min : 0.1
},
},
关于properties的参数说明,请参考官方文档:
http://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
然后我们重新改造一下action,顺便再优化一下细节
start () {
let x = this.node.x;
let duration = 5 - (this.node.x + 320) / 640 * 5;
let sqeAction = cc.sequence(
cc.moveTo(duration,cc.v2(320,this.node.y)),
cc.flipX(true),//翻转X
cc.moveTo(duration,cc.v2(x,this.node.y)),
cc.moveTo(5 - duration,cc.v2(-320,this.node.y)),
cc.flipX(false),//翻转X
cc.moveTo(5 - duration,cc.v2(x,this.node.y)),
);
let action = cc.speed(cc.repeatForever(sqeAction), this.mSpeed);
this.node.runAction(action);//重复运动
},
在属性编辑器中把Speed改为2,再看下效果:
很好,完美,这样关于鱼的运动这一块我们就完成了。