cocos程序从1.9.3升级到2.0.2以后,龙骨动画就播放不正常了

如题,龙骨动画的播放不正常了,但是没有报错提示,只有这个警告

import GameManager from “./game_manager”;

const { ccclass, property } = cc._decorator;

@ccclass
export default class DragonBones extends cc.Component {

@property(cc.Node)
touchHandler: cc.Node = null;

gameManager: GameManager = null;

armatureDisplay: dragonBones.ArmatureDisplay = null;
armature: dragonBones.Armature = null;
aimDir = 0;
aimRadian = 0;
aimState = null;
target: cc.Vec2;
beginLocation: cc.Vec2;
bow_Point: cc.Vec2;

start() {
    this.armatureDisplay = this.getComponent(dragonBones.ArmatureDisplay);
    this.armature = this.armatureDisplay.armature();

    dragonBones.WorldClock.clock.add(this.armature);

    this.gameManager = GameManager.getInstance();

    this.touchHandler.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMove, this, true);
    this.touchHandler.on(cc.Node.EventType.TOUCH_START, this.onTouchStart, this, true);
    this.touchHandler.on(cc.Node.EventType.TOUCH_END, this.onTouchEnd, this, true);
    this.touchHandler.on(cc.Node.EventType.TOUCH_CANCEL, this.onTouchEnd, this, true);
}

onTouchStart(e: cc.Event.EventTouch) {
    this.beginLocation = e.getLocation();
    if (this.gameManager.timeChoose) {
        this.armature.animation.play("open_time", 1);
    } else if (this.gameManager.dartleChoose) {
        this.armature.animation.play("open_laser", 1);
    } else if (this.gameManager.followChoose) {
        this.armature.animation.play("open_follow", 1);
    } else {
        this.armature.animation.play("open_normal", 1);
    }
}

onTouchMove(e: cc.Event.EventTouch) {
    let touches = e.getTouches();
    let touchLoc = touches[0].getLocation();
    this.aim(touchLoc.x, touchLoc.y);

    let firePointBone = this.armature.getBone("bow");
    let localPoint = cc.v2(firePointBone.global.x, -firePointBone.global.y);
    this.bow_Point = this.node.convertToWorldSpaceAR(localPoint);

}

onTouchEnd(e: cc.Event.EventTouch) {
    if (this.beginLocation.x - e.getLocation().x === 0) {
        return;
    }
    this.armature.animation.play("shoot_normal", 1);
}

aim(x: number, y: number) {
    if (this.aimDir === 0) {
        this.aimDir = 10;
    }

    this.target = this.node.getParent().convertToNodeSpaceAR(cc.v2(x, y));
}

update(dt) {
    this._updateAim();
}

_updateAim() {
    if (this.aimDir === 0) {
        return;
    }

    let vec = cc.v2(this.target.x, this.target.y).sub(this.beginLocation).neg();
    let hudu = Math.atan2(-(vec.y), vec.x);
    if (Math.abs(hudu) < Math.PI / 4) {
        this.aimRadian = hudu;
    }

    // this._aimState.weight = Math.abs(this._aimRadian / Math.PI * 2);
    this.armature.getBone("body").offset.rotation = -this.aimRadian;
    this.armature.invalidUpdate();
    this.aimDir = 0;
}

// update (dt) {},

}

上面是我用的代码,我看1.10和2.0的更新上没有看到关于龙骨的更新,想知道是什么问题导致的不能正常运行,是代码有地方用错了吗?

你好 你看下项目模块设置是否设置了勾选了webGL和龙骨模块

都有勾选

资源是否丢失了,编辑器有没有报错。 如果不行的话尝试删除 项目文件夹下的 library local temp

资源没有丢失,编辑器没有报错,删除文件后还是这个情况。
另外我另外一个场景有也有用到这个龙骨动画,那个的动画播放是正常的。不过那个只用了一个简单的播放动画,我里面的那个则是通过希望通过代码控制龙骨的旋转,但是在使用的时候的,touchstart和touchmove的动画和rotation改变都没了效果,结尾的时候的动画倒是正常的

找到一个类似的,不过他说是1.4的问题,但是也有人最近回复说有这个问题
https://forum.cocos.com/t/1-4-gldrawelements-range-out-of-bounds-for-buffer/43987

2.0的升级并未修改龙骨组件的API .
尝试在2.0.2上简单的制作一个demo吧.
执行下下你认为异常的代码 如果效果正常 那么可能是另有原因了,那么如果是API的bug 那就尽快修复。

好的,我先试试弄个简单的demo

我弄了一个简单的demo,里面只有龙骨动画和上面那一段的代码进行过简略,然后我分别在1.9.3和2.0.2跑了一下,在2.0.2动画播放应该都是正常的,但是骨骼的旋转这里就一直没反应,而在1.9.3则完全正常
test.zip (703.0 KB)
这个是我的demo,能麻烦帮我看一下问题具体出在哪里了吗

可以的 明天给你消息

好的,等待你们的结果

2版本是有问题的。

龙骨动画在2.0上播放是不正常, 我是把sp.Skeleton下的 Premultiplied Alpha(贴图预乘)属性取消掉就正常了, 2.0应该是改了预乘机制

我试了一下,我改了一下你说的Premultiplied Alpha,勾不勾选都会有龙骨动画精灵闪烁的问题

@slant 这个问题是因为我们在2.0.2中升级了龙骨库,当前版本为5.6.2,旧版本单纯设置rotation的方法已经不能实现你的效果。你尝试把龙骨编辑器升级至最新版本,研究下新版本中的龙骨骨骼旋转偏移的属性配置接口和变换过程。

咋就播放不正常了 我们的范例雷打不动的播放正常~~

这个是需要更新龙骨动画的意思吗,我现在没办法改动这个龙骨动画,有什么办法吗

还有一个就是这个,应该属于另外一个问题了,我的另外一个龙骨动画,没有用代码对他进行操作,但是放上去一直播放一个动画会出现这样的提示,然后那个精灵就会闪烁了

这个异常的骨骼动画有没有放到独立的demo中运行过 是否也会出现这个问题

我试了一下,单独放出来的话则不会有闪烁的问题,我检查一下代码

你在项目中有没有使用拖尾组件(MotionStreak),我们在2.0.4版本中修复了小部分渲染上的问题,你尝试升级到2.0.4版本看下。