日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

实习小白::(转) Cocos2d-x 3.0开发(十三)使用CocoStudio编辑帧事件并关联到程序...

發布時間:2025/4/16 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实习小白::(转) Cocos2d-x 3.0开发(十三)使用CocoStudio编辑帧事件并关联到程序... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、概述

? ? 幀事件也是新加入的功能。這篇中我們將看到如何使用它。我們將上篇中制作的動畫稍加修改。有圖為證:

?


?

2、用途與原理

?

? ? 首先介紹一下幀事件。正如其名:一個與幀相關聯的事件。

? ? 為什么要這么做呢?首先沒人想做一大堆碎動畫,然后一點一點拼著播放吧。另外,有時候流程與事件控制最好關聯到幀。比如一個攻擊動作,有出刀和收刀兩部 分。傷害自然是在刀所觸到敵人時候產生的。做成兩個動畫比較麻煩,程序要管理大量的動畫,而且美工也會很郁悶:不但給你們切圖,還要給你們切動畫。如果用 固定時間來做,也是會有問題。比如機器卡了,幀數就會下降。這個時候,時間就不準確了。用幀事件的方式就會比較好,到了“觸刀”那幀,就會有事件,能較好 的處理這種情況。

?

? ? 它的原理是監聽。當運行到事件所在的幀時,會觸發回調。我們要做的就是在回調函數中操作,判斷這一幀是不是我們想要的,標記的方式是Tag字符串。

?

3、設置幀事件

? ? 打開項目,運行動畫編輯器,切換到動畫模式。

? ? 將時間軸拖動到相應幀處,選擇一個對象,這里我選擇的是左手。然后在它的屬性中設置幀事件。


?

?

4、創建新工程

? ? 運行腳本創建testFrameEvt,編譯運行確保原始工程正確。

? ? 將CocoStudio導出的資源復制到Resource目錄下。

? ?然后配置CocoStudio導出文件的依賴路徑和庫。可參照:Cocos2d-x 3.0 開發(十一)3.0 alpha1文件結構變化?。

?

5、載入動畫

?

? ? 更改init:

?

?

[cpp] view plaincopyprint?
  • bool?HelloWorld::init()??
  • {??
  • ????//??
  • ????//?1.?super?init?first??
  • ????if?(?!Layer::init()?)??
  • ????{??
  • ????????return?false;??
  • ????}??
  • ??????
  • ????Size?visibleSize?=?Director::getInstance()->getVisibleSize();??
  • ????Point?origin?=?Director::getInstance()->getVisibleOrigin();??
  • ??
  • ????ArmatureDataManager::getInstance()->addArmatureFileInfo("changeShape.ExportJson");??
  • ????Armature*?arm?=Armature::create("changeShape");??
  • ????arm->getAnimation()->play("frameSingle");??
  • ????arm->getAnimation()->setSpeedScale(0.5);??
  • ????arm->setPosition(Point(visibleSize.width/2,visibleSize.height/2));??
  • ??
  • ????this->addChild(arm);??
  • ????return?true;??
  • }??
  • ?

    ? ? 運行,可見動畫播放。

    ?

    6、監聽幀事件

    ?

    ? ? 在類中添加一個函數:

    ?

    [cpp] view plaincopyprint?
  • void?onFrameEvent(Bone?*bone,?const?string&?evt,?int?originFrameIndex,?int?currentFrameIndex);??
  • ?

    ? ? 并在cpp中實現:

    [cpp] view plaincopyprint?
  • void?HelloWorld::onFrameEvent(Bone?*bone,?const?string&?evt,?int?originFrameIndex,?int?currentFrameIndex)??
  • {??
  • ????if(strcmp(evt,"110")?==?0)??
  • ????{??
  • ????????ActionInterval?*action?=??ShatteredTiles3D::create(0.8f,?Size(30,30),?5,?false);???
  • ????????this->runAction(action);??
  • ????}??
  • }??
  • ?

    ? ? 可以看出,事件是由一個字符串來標記的。

    ? ? 最后在init中注冊:

    ?

    [cpp] view plaincopyprint?
  • arm->getAnimation()->setFrameEventCallFunc(this,frameEvent_selector(HelloWorld::onFrameEvent));??
  • ?

    ? ? 幀事件我們用了一個效果來表現,所以還要恢復Grid,這里我們加入一個schedule函數。當然,這里也可以用幀事件來標記恢復點。

    ?

    [cpp] view plaincopyprint?
  • //聲明??
  • ????void?checkAction(float?dt);??
  • ??
  • //實現??
  • ????void?HelloWorld::checkAction(float?dt)??
  • {??
  • ????if?(?this->getNumberOfRunningActions()?==?0?&&?this->getGrid()?!=?nullptr)??
  • ????????this->setGrid(nullptr);??
  • }??
  • //注冊??
  • schedule(?schedule_selector(HelloWorld::checkAction)?);??
  • ?

    ? ? 編譯運行,就能看到效果了。

    ?

    7、總結

    ??? 通過在cocoStudio中設置Tag的方式來標記幀事件,在程序中設置回調。然后根據tag名來判斷是否是需要的幀事件。這里我有兩個擔心,首先是效 率問題,不知當幀事件多的時候,監聽運行起來效率如何。第二是當效率低自動抽幀時,會不會將事件幀抽掉,導致沒有事件出現。但愿我的擔心是多余的。

    ?

    ? ? Demo 下載:http://download.csdn.net/detail/fansongy/6621423

    ?

    ? ? 本篇博客出自阿修羅道,轉載請注明出處,不得用于商業用途:http://blog.csdn.net/fansongy/article/details/16991385?

    轉載于:https://www.cnblogs.com/dudu580231/p/4983785.html

    總結

    以上是生活随笔為你收集整理的实习小白::(转) Cocos2d-x 3.0开发(十三)使用CocoStudio编辑帧事件并关联到程序...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。