使用DragonBones遇到的問題


dragonBones好用歸好用 

不過遇到問題時能參考的資料不多

(因為專題需要所以使用dragonBones一段時間了)

 最近遇到的問題 

 1.沒辦法手動key關鍵幀 

早期的版本可以透過「K」鍵key幀,現在則是透過偵測變化自動key幀

最近研究動畫時,我想做到每次做完動作後可以恢復到原本的姿勢

這部分以新版本來說就沒辦法透過key原始姿勢1幀輕鬆做到

原本想說fadeOut可以讓動作恢復,結果是會錯意。

於是我想到那麼就去監聽每次的動作COMPLETED後執行恢復到我設定的那個姿勢

 2.監聽事件寫法 

查看了一下dragonBones的API 

看到 addEventListener ( type :EventStringType, listener :Function, target :any ):void
上網查了一下用法,試著寫了,不過它都會出現this.armatureDisplay.armature.addEventListener is not a function 的錯誤訊息。

最後查到了一篇文章 --- https://blog.csdn.net/qq_35641923/article/details/80772806

看來 addEventListener 的用法已經廢棄了

而dragonBones API  更新時間為 2019-7 怎麼還會放在上面使用呢?!

這是我嘗試後成功的寫法:


	let textureImg = resources[ResourcesManager.Character_tex].texture; //紋理圖png
	let textureData = character_tex_json//紋理圖data
	let skeletonData = character_ske_json //骨骼data
                
	this.factory = new dragonBones.PixiFactory();
	this.factory.parseDragonBonesData(skeletonData);
	this.factory.parseTextureAtlasData(textureData, textureImg); 

	this.armatureDisplay = this.factory.buildArmatureDisplay('Boy');

	// this.armatureDisplay.addEventListener(dragonBones.EventObject.COMPLETE,()=>{
	//     this.armatureDisplay.animation.gotoAndStopByTime('clapHand',0)
	// })

	this.armatureDisplay.armature.eventDispatcher
	    .addDBEventListener(dragonBones.EventObject.COMPLETE,this.animationEventHandler,this)

      animationEventHandler(event) {
              if (event.type === dragonBones.EventObject.COMPLETE) {
                  if (event.animationState.name === "clapHand") {
                      console.log("clapHand 動作播放完畢!!!");    
                      //TODO:
                  }
              }
      }

Ban掉的地方是我原本測試用的。

接著嘗試了上面找到文章的用法:

this.armatureDisplay.eventDispatcher.addDBEventListener(dragonBones.EventObject.COMPLETE, this.animationEventHandler,this)

不過還是無法~~~

最後看到了這篇文章 --- https://www.jianshu.com/p/5e65e69ec3f4

嘗試後用armatureDisplay.armature才成功!


https://bbs.egret.com/thread-27369-1-1.html 找到以前的文章說明:

// 用 armatureDisplay 來做跟平台相關的操作,比如事件渲染相關等。

// 用 armatureDisplay.armature, armatureDisplay.animation 來做跟 db 相關的操作,比如播放動畫獲取骨骼或插槽或換裝等。

可是看了一下

 armatureDisplay armature

只有在armature的部分可以看到eventDispatcher


dragonBones的接口和API參考可能需要進一步的調整以及說明
有疑問什麼使用中文去查詢會比較方便,畢竟是大陸開發的軟體
上egret dragonBones社區詢問、交流也是個不錯的選擇

留言

這個網誌中的熱門文章

使用Sensor APIs(Web API)遇到的問題【如何讓http -> https(SSL)】

學習將Line Bot連結webhook(with ngrok)