CocosCreator微信小游戏入门实战《小猫钓鱼》(二):动作系统

分类栏目:cocos教程

227

上一节我们把基本的工程已经搭建起来了,并且写下了我们的第一行代码。相信你对于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,再看下效果:

很好,完美,这样关于鱼的运动这一块我们就完成了。