回调退出动态播放(Java)

最終更新: 2023年1月26日

概述

在Cubism SDK for Java 中,您可以在退出动态播放时通过回调获取Event。
在范例中,通过回调函数输出退出播放的记录文本。

回调实装

此次,由于在退出动态播放时通过回调进行处理,因此进行实装,使其能够通过管理动态的抽象类
Framework/src/motion/ACubismMotion进行回调处理。

public class ACubismMotion{
    ...
    // モーション再生終了コールバックの登録
    public void setFinishedMotionHandler(IFinishedMotionCallback onFinishedMotionHandler) {
        onFinishedMotion = onFinishedMotionHandler;
    }

    // モーション再生終了コールバックの取得
    public IFinishedMotionCallback getFinishedMotionCallback() {
        return onFinishedMotion;
    }

    // モーション再生終了時に呼び出されるコールバック関数を入れる変数
    protected IFinishedMotionCallback onFinishedMotion;
}
/**
* 用作动态播放结束回调的接口
**/
public interface IFinishedMotionCallback {
    public void execute(ACubismMotion motion);
}

在Cubism SDK for Java中,使用执行作为回调定义的接口的物体来再现回调机制。

Tips

在范例中,以下情况无法调用回调,敬请注意。

  • 当正在播放的动态设置为“循环”时
  • 在回调中注册null时

回调函数的使用

实装希望通过回调函数实际处理的内容。

在范例中,通知退出动态播放的记录文本被实装为使用LAppPal.printLog输出。
如果要在退出动态播放时变更处理,请变更以下函数的实装。

private static class FinishedMotion implements IFinishedMotionCallback {
    @Override
    public void execute(ACubismMotion motion) {
        LAppPal.printLog("Motion Finished: " + motion);
    }
}

另外,在注册回调方法时,在使用导入动态数据的Framework层的CubismUserMotion.loadMotion方法时,会在生成动态的同时传递回调方法。
如果已经有了一个动态,则使用“实装回调”中介绍的setFinishedMotionHandler()。

public int startMotion(
    final String group,
    int number,
    int priority,
    IFinishedMotionCallback onFinishedMotionHandler
) {
    .
    .
    .
    if (motion == null) {
        String fileName = modelSetting.getMotionFileName(group, number);
        if (!fileName.equals("")) {
            String path = modelHomeDirectory + fileName;
            byte[] buffer = LAppPal.loadFileAsBytes(path);

            // モーションデータを読み込むのと同時にコールバック関数オブジェクトを渡して登録する
            motion = loadMotion(buffer, onFinishedMotionHandler);
            .
            .
            .
        }
    } else {
        motion.setFinishedMotionHandler(onFinishedMotionHandler);
    }
}

在范例中,回调函数是从执行获取点击Event的onTap()时调用的startRandomMotion()传入。
此外,由于实际播放动态的是CubismMotion.doUpdateParameters(),因此进行实装,以便可以将回调函数传递给CubismMotion。

public static CubismMotion create(byte[] buffer, IFinishedMotionCallback callback) {
    CubismMotion result = new CubismMotion();
    result.parse(buffer);

    result.sourceFrameRate = result.motionData.fps;
    result.loopDurationSeconds = result.motionData.duration;

    // コールバック関数の登録
    result.onFinishedMotion = callback;

    return result;
}

关于实装的发展

范例中只实装了退出动态播放,但通过发展这些实装,可以在退出动态播放后通过回调函数进行异步处理等,
通过从要应用回调的实际处理中反转函数,您可以在退出动态播放以外的地方实装回调。

请问这篇文章对您有帮助吗?
关于本报道,敬请提出您的意见及要求。