【Cocos2d-html5遊戲引擎學習筆記(13)】ProgressAction進度計時器(1)

來源:互聯網
上載者:User

我們在玩大型RPG遊戲中,經常可以看到每個人物會有很多的技能,技能在施放的時候,可能需要吟唱一段時間,此時螢幕上會有個水平的時間條計時,當技能施放過後,又有CD時間,即所謂的冷卻,這個時候技能槽就會呈現一個扇形轉圈的時間倒計時。在Cocos2d-html5中,我們依然可以十分輕鬆的將這個兩種時間進度表現出來,就是ProgressAction。由於篇幅可能比較多,我打算分兩次來闡述。


ProgressAction需要用到兩個函數:

1.cc.ProgressTo.create(duration, percent);

duration:進度計時器的時間周期(單次)

percent:進度的百分比


2.cc.ProgressTimer.create(sprite);

sprite:精靈類的圖片


我們先從扇形類型的說起吧。

代碼如下:

var to1 = cc.ProgressTo.create(5, 100);  //定義好經曆的時間和百分比var to2 = cc.ProgressTo.create(8, 100);var left = cc.ProgressTimer.create(cc.Sprite.create("res/powered.png"));left.setType(cc.PROGRESS_TIMER_TYPE_RADIAL); //設定進度的類型為扇形left.setPosition(cc.p(size.width/4, size.height / 2));this.addChild(left);left.runAction(to1); //執行動作var right = cc.ProgressTimer.create(cc.Sprite.create("res/powered.png"));right.setType(cc.PROGRESS_TIMER_TYPE_RADIAL);right.setReverseDirection(true); //設定反方向進行旋轉right.setPosition(cc.p(size.width/4*3, size.height / 2));this.addChild(right);right.runAction(cc.RepeatForever.create(to2));

效果如下:



如果你可以運行起來,你會發現,由於我設定左邊的時間為5秒,右邊的為8秒,左邊會很快執行完,而且左邊只執行了一次,右邊會一直反覆的運動,從這裡也可以看出cc.ProgressTo其實是一個Action。


下面我調整一下百分比,並且都只執行一次,我們看下結果。

代碼如下:

var left = cc.ProgressTimer.create(cc.Sprite.create("res/powered.png"));left.setType(cc.PROGRESS_TIMER_TYPE_RADIAL); //設定進度的類型為扇形left.setPosition(cc.p(size.width/4, size.height / 2));this.addChild(left);left.runAction(cc.ProgressTo.create(5, 70)); //由於ProgressTo是一個動作,為了方便,可以直接寫在runAction中var right = cc.ProgressTimer.create(cc.Sprite.create("res/powered.png"));right.setType(cc.PROGRESS_TIMER_TYPE_RADIAL);right.setReverseDirection(true); //設定反方向進行旋轉right.setPosition(cc.p(size.width/4*3, size.height / 2));this.addChild(right);right.runAction(cc.ProgressTo.create(8, 100)); //left的百分比是70,而right是100
效果如下:


可以看到左邊會在圖片的70%的地方結束,並且這70%所花的時間是5秒,而不是5*70%!


接著我們再看下條形進度計時器。

這裡有兩個很重要的方法:

setBarChangeRate(barChangeRate) 設定進度條的方向,即水平或者垂直進度條

setMidpoint(mpoint) 設定進度條的走向,即若為水平方向控制從左至右還是從右至左,若為垂直方向控制從上到下還是從下到上



下面給出水平的進度條代碼:

var to1 = cc.ProgressTo.create(5, 100);var to2 = cc.ProgressTo.create(2, 100);var left = cc.ProgressTimer.create(cc.Sprite.create("res/powered.png"));left.setType(cc.PROGRESS_TIMER_TYPE_BAR);left.setBarChangeRate(cc.p(1, 0));left.setMidpoint(cc.p(0, 0));this.addChild(left);left.setPosition(cc.p(size.width/4, size.height/2));left.runAction(cc.RepeatForever.create(to1));var right = cc.ProgressTimer.create(cc.Sprite.create("res/powered.png"));right.setType(cc.PROGRESS_TIMER_TYPE_BAR);right.setBarChangeRate(cc.p(1, 0));right.setMidpoint(cc.p(1, 0));this.addChild(right);right.setPosition(cc.p(size.width/4*3, size.height/2));right.runAction(cc.RepeatForever.create(to2));
效果如下:



豎直進度條的代碼:

var to1 = cc.ProgressTo.create(5, 100);var to2 = cc.ProgressTo.create(2, 100);var left = cc.ProgressTimer.create(cc.Sprite.create("res/powered.png"));left.setType(cc.PROGRESS_TIMER_TYPE_BAR);left.setBarChangeRate(cc.p(0, 1));left.setMidpoint(cc.p(0, 0));this.addChild(left);left.setPosition(cc.p(size.width/4, size.height/2));left.runAction(cc.RepeatForever.create(to1));var right = cc.ProgressTimer.create(cc.Sprite.create("res/powered.png"));right.setType(cc.PROGRESS_TIMER_TYPE_BAR);right.setBarChangeRate(cc.p(0, 1));right.setMidpoint(cc.p(0, 1));this.addChild(right);right.setPosition(cc.p(size.width/4*3, size.height/2));right.runAction(cc.RepeatForever.create(to2));
效果如下:


我想通過這幾個執行個體可以弄明白這個進度條的走向和方向了吧,關鍵就是在於理解setBarChangeRate和setMidpoint這兩個方法,下一節繼續討論這個進度計時器的知識點。


不早了,睡覺了。。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.