相关文章推荐
全部打开
全部关闭
  • Cubism SDK手册
  • 关于Cubism 4新功能的SDK支持
  • 关于Cubism 4.2新功能的SDK支持
  • 关于Cubism 4.2功能的SDK兼容性
  • 将旧版本的项目迁移到Cubism 4 SDK
  • 注意事项
  • 平台对比
  • Original Workflow
  • Cubism Core
  • SDK for Native
  • SDK for Web
  • SDK for Unity
  • SDK for Java
  • SDK for Cocos Creator
  • 常问问题
  • 在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中,使用执行作为回调定义的接口的物体来再现回调机制。

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

  • 当正在播放的动态设置为“循环”时
  • 在回调中注册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;
    

    关于实装的发展

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

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