官方文檔中龍骨動畫的調用方法和事件監聽方法,在實際項目中都會提示已廢棄,在網上也沒找到一個討論和解決這個問題的帖子,就自己去摸索了一下,下面貼出解決方法。
這是網上找到的比較常見的寫法:
private createGameScene(): void {
var dragonbonesData = RES.getRes( "RobotGame_1_json" ); var textureData = RES.getRes( "texture_json" ); var texture = RES.getRes( "texture_png" ); var dragonbonesFactory:dragonBones.EgretFactory = new dragonBones.EgretFactory(); dragonbonesFactory.addDragonBonesData(dragonBones.DataParser.parseDragonBonesData(dragonbonesData)); dragonbonesFactory.addTextureAtlas(new dragonBones.EgretTextureAtlas(texture,textureData)); var armature: dragonBones.Armature = dragonbonesFactory.buildArmature("robot");
var armatureDisplay = this.armature.getDisplay();
this.addChild(armatureDisplay);
armatureDisplay.x = 200; armatureDisplay.y = 300; armatureDisplay.scaleX = 0.5; armatureDisplay.scaleY = 0.5; dragonBones.WorldClock.clock.add( armature ); armature.animation.gotoAndPlay("Run"); egret.Ticker.getInstance().register(function(frameTime:number){
dragonBones.WorldClock.clock.advanceTime(0.01)
},this);
armature.addEventListener( dragonBones.AnimationEvent.START, this.startPlay,this); armature.addEventListener( dragonBones.AnimationEvent.LOOP_COMPLETE, this.loop_com,this); armature.addEventListener( dragonBones.FrameEvent.ANIMATION_FRAME_EVENT, this.frame_event,this); }
private startPlay(evt:dragonBones.ArmatureEvent) { console.log( "armature 開始播放動畫!"); } private loop_com(evt:dragonBones.ArmatureEvent) { console.log( "armature 動畫播放完一輪完成!"); } private frame_event(evt:dragonBones.FrameEvent) { console.log( "armature 播放到了一個關鍵幀! 幀標籤爲:",evt.frameLabel); }
綠色部分爲已廢棄代碼,下面的對應修改後的代碼:
private createGameScene(): void {
var dragonbonesData = RES.getRes( "RobotGame_1_json" ); var textureData = RES.getRes( "texture_json" ); var texture = RES.getRes( "texture_png" ); var dragonbonesFactory:dragonBones.EgretFactory = new dragonBones.EgretFactory();
//dragonbonesFactory爲new dragonBones.EgretFactory() 變量,後面需要調用
dragonbonesFactory.addDragonBonesData(dragonbonesFactory.parseDragonBonesData(dragonbonesData)); dragonbonesFactory.addTextureAtlas(dragonbonesFactory.parseTextureAtlasData(texture,textureData)); var armature: dragonBones.Armature = dragonbonesFactory.buildArmature("robot");
var armatureDisplay = this.armature.display;
this.addChild(armatureDisplay);
armatureDisplay.x = 200; armatureDisplay.y = 300; armatureDisplay.scaleX = 0.5; armatureDisplay.scaleY = 0.5; dragonbonesFactory.clock.add( armature ); armature.animation.gotoAndPlay("Run"); egret.Ticker.getInstance().register(function(frameTime:number){
dragonbonesFactory.clock.advanceTime(0.01)
},this);
armature.eventDispatcher.addDBEventListener( dragonBones.EventObject.START, this.startPlay,this); armature.eventDispatcher.addDBEventListener( dragonBones.EventObject.LOOP_COMPLETE, this.loop_com,this); armature.eventDispatcher.addDBEventListener( dragonBones.EventObject.FRAME_EVENT, this.frame_event,this); }
private startPlay(evt:dragonBones.ArmatureEvent) { console.log( "armature 開始播放動畫!"); } private loop_com(evt:dragonBones.ArmatureEvent) { console.log( "armature 動畫播放完一輪完成!"); } private frame_event(evt:dragonBones.FrameEvent) { console.log( "armature 播放到了一個關鍵幀! 幀標籤爲:",evt.frameLabel); }