1. 程式人生 > >CocosCreator之KUOKUO帶你做喵喵的跳躍(4)

CocosCreator之KUOKUO帶你做喵喵的跳躍(4)

本次引擎2.0.5

編輯工具VSCode

如遇不會某個步驟可以先過一遍之前教程,或者下方評論,感謝支援!

目標:喵喵的跳躍

今天教大家CocosCreator的動作函式;

它可以實現平滑的每秒60幀左右的動畫,極大的省下了美術的工作量。

好了,讓我們先亮出所需素材:點選下載

提取:ly3w

(美術很用心畫的呢O(∩_∩)O~~禁止商業使用)

好了,我們把圖片拖進去吧:

然後建個背景(Sprite(單色))

把miao1圖片拖進去:

好了,讓我們新建個指令碼:

就叫miaojs吧,然後直接繫結到miao1節點上。

好了,雙擊進入VScode開始編輯,先讓指令碼可愛起來:

哦對了,差點忘了把場景儲存了~

然後我來介紹一下CocosCreator的動作系列一般用法:

第一步:宣告動作;

第二步:利用runAction函式呼叫;

(注:動作的種類常用的就是:移動,旋轉,縮放,緩動)

好了,我們先試著讓它往上移動:

意思是花兩秒讓miao1往y的正方向運動100距離;

我們把圖片往下放放然後執行一下試試看:

是不是動了呢~

好,既然我們的目標是模擬跳躍,還得往下來呀!

我們就得用到順序執行函式,看下面註釋。

(我習慣給動作取名字用: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~~