@Override
    void update(float tpf) {
        assert tpf >= 0f : tpf;

        if (prevBoneTransforms == null) {
            /*
             * On the first update, allocate and initialize
             * the array of previous bone transforms, if it wasn't
             * allocated in blendToKinematicMode().
             */
            int numManagedBones = managedBones.length;
            prevBoneTransforms = new Transform[numManagedBones];
            for (int mbIndex = 0; mbIndex < numManagedBones; ++mbIndex) {
                Joint managedBone = managedBones[mbIndex];
                Transform boneTransform
                        = managedBone.getLocalTransform().clone();
                prevBoneTransforms[mbIndex] = boneTransform;
            }
        }

        super.update(tpf);
        /*
         * Save copies of the latest bone transforms.
         */
        for (int mbIndex = 0; mbIndex < managedBones.length; ++mbIndex) {
            Transform lastTransform = prevBoneTransforms[mbIndex];
            Joint managedBone = managedBones[mbIndex];
            lastTransform.set(managedBone.getLocalTransform());
        }
    }
Internal callback, invoked once per frame during the logical-state
update, provided the control is added to a scene.

@param tpf the time interval between frames (in seconds, &ge;0)
jme3-jbullet/src/main/java/com/jme3/bullet/animation/BoneLink.java