CocosCreator之KUOKUO带你做喵喵的跳跃(4)

本次引擎2.0.5

编辑工具VSCode

如遇不会某个步骤可以先过一遍之前教程,或者下方评论,感谢支持!

 

目标:喵喵的跳跃

今天教大家CocosCreator的动作函数;

它可以实现平滑的每秒60帧左右的动画,极大的省下了美术的工作量。

 

好了,让我们先亮出所需素材:点击下载

提取:ly3w

(美术很用心画的呢O(∩_∩)O~~禁止商业使用)

 

好了,我们把图片拖进去吧:

然后建个背景(Sprite(单色))

把miao1图片拖进去:

好了,让我们新建个脚本:

就叫miaojs吧,然后直接绑定到miao1节点上。

好了,双击进入VScode开始编辑,先让脚本可爱起来:

哦对了,差点忘了把场景保存了~

然后我来介绍一下CocosCreator的动作系列一般用法:

第一步:声明动作;

第二步:利用runAction函数调用;

(注:动作的种类常用的就是:移动,旋转,缩放,缓动)

好了,我们先试着让它往上移动:

意思是花两秒让miao1往y的正方向运动200距离;

我们把图片往下拖一拖,然后运行一下试试看:

是不是动了呢~

好,既然我们的目标是模拟跳跃,还得往下来呀!

我们就得用到顺序执行函数,看下面注释。

(我习惯给动作取名字用:act_用处,的这种模式,这里我把第一个改成act_shang。)

 

cc.sequence函数里面可以放很多动作,它会按顺序一个一个执行。

相信聪明的你一下子就会理解的!吼吼~

试试看吧,是不是可以上下动了呢。

但是感觉怪怪的,哦,让我们加个放大缩小的动作吧,让喵喵变得“有弹性”:

既然有顺序执行函数,那么对应的一定会有同时执行函数:

(贴出代码)

cc.Class({
    extends: cc.Component,

    properties: {
    },
    start () {
        var act_shang = cc.moveBy(2,0,200);//2秒向上200距离
        var act_xia = cc.moveBy(2,0,-200);//2秒向下200距离
        var act_da = cc.scaleTo(2,1,1);//2秒放大y轴至1倍大小,x轴一直为1
        var act_xiao = cc.scaleTo(2,1,0.85);//2秒缩小y轴至0.85倍大小,x轴一直为1
        //cc.spawn函数是同步执行动作函数
        var act_1 = cc.spawn(act_shang,act_da);
        var act_2 = cc.spawn(act_xia,act_xiao);
        //将两个同步执行函数顺序执行
        var act_s = cc.sequence(act_1,act_2);
        this.node.runAction(act_s);
    },
});

诶,有一个问题,第一阶段向上时,因为图片原本就是1倍大小,没有放大的动画;

这个简单:

第一步,因为我们准备素材都是200*200定好的,我们选择原始尺寸模式:

第二步,我们更改初始的y轴缩放为0.85

再试试看,是不是很有趣:

但是,不难发现,上下的动画是匀速的,正常的跳跃应该是先快后慢,然后在最高点向下时是先慢后快;

怎么解决呢?其实官方还是很贴心的准备了很多缓动动作滴。

比如这些:

好,在这里我们用到前两个,怎么用呢?简单,加个.easing()函数就行。

.easing(参数为缓动动作)

cc.easeOut(参数为“某种程度”,你可以把它改成1,2,3分别看看效果)

好了,我们可爱的喵喵有弹性了呢,但是它只能duang~一下,怎么永远重复的duang~呢;

很简单,一看就懂:

怎么样,达到目标了哟,给自己鼓个掌!

如果嫌它慢可以改一下动作运行时间参数。

O(∩_∩)O~~

进阶:跳跃最底下时改图片,让喵喵表情更丰富

我们可爱的喵喵可以更可爱:

首先,我们需要声明两个Sprite图片类型的变量来搭桥梁:

保存脚本,然后把miao1,miao2拖过去:

这样我们就可以在脚本里使用这两张图片

好了,我们接下来需要写出可以插入到动作里的函数:

用到了cc.callFunc();这个函数可以放在runAction()函数里使用;

然后用到了getComponent()这个函数用来改变图片;

最后,因为如果不延时,我们看不到现象,用到了cc.delayTime()函数;

怎么样,头大了吗?

其实真的不难,函数的名字就是英文的基础意思,用两次就会了。

这里给出代码和详细注释,研究研究:

cc.Class({
    extends: cc.Component,

    properties: {
        miao1:cc.SpriteFrame,
        miao2:cc.SpriteFrame,
    },
    start () {
        var change_1 = cc.callFunc(function(){
            //首先get到节点上的精灵组件,然后用this.miao2更换图片
            this.node.getComponent(cc.Sprite).spriteFrame = this.miao2;
        },this);

        var change_2 = cc.callFunc(function(){
            //首先get到节点上的精灵组件,然后用this.miao1更换图片
            this.node.getComponent(cc.Sprite).spriteFrame = this.miao1;
        },this);

        var act_shang = cc.moveBy(2,0,200);
        var act_xia = cc.moveBy(2,0,-200);
        var act_da = cc.scaleTo(2,1,1);//2秒放大y轴至1倍大小,x轴一直为1
        var act_xiao = cc.scaleTo(2,1,0.85);//2秒缩小y轴至0.85倍大小,x轴一直为1
        //cc.spawn函数是同步执行动作函数
        var act_1 = cc.spawn(act_shang,act_da);
        var act_2 = cc.spawn(act_xia,act_xiao);
        //将两个同步执行函数顺序执行
        var act_s = cc.sequence(act_1.easing(cc.easeOut(2)),act_2.easing(cc.easeIn(2)),change_1,cc.delayTime(0.3),change_2);
        //cc.delayTime()这个函数是延时函数,延时0.3秒为了让喵喵的变化停留一段时间
        //第一个动作快到慢,第二个慢到快
        var act_repeat = cc.repeatForever(act_s);
        //让act_s动作永远重复
        this.node.runAction(act_repeat);
    },
});

我们可爱的喵喵欢快的在duang~duang~duang~

一定要亲自动手打一打代码哦。

O(∩_∩)O~~

猜你喜欢

转载自blog.csdn.net/kuokuo666/article/details/84000664