Skip to content
This repository has been archived by the owner on Feb 13, 2024. It is now read-only.

"idle" 设置多个动作时每次加载只会执行其中一个动作,不会随机到别的动作 #62

Open
Nick-Hopps opened this issue Mar 1, 2020 · 5 comments

Comments

@Nick-Hopps
Copy link

Nick-Hopps commented Mar 1, 2020

Describe the bug

"idle": [
      {"file": "mtn/idle_01.mtn", "fade_in": 2000, "fade_out": 2000},
      {"file": "mtn/idle_02.mtn", "fade_in": 2000, "fade_out": 2000},
      {"file": "mtn/idle_03.mtn", "fade_in": 2000, "fade_out": 2000},
      {"file": "mtn/idle_04.mtn", "fade_in": 2000, "fade_out": 2000}
    ]

我在 "idle" 中设置了4个动作,使用 Live2D 的 SampleApp 加载时,模型会不断随机这 4 个动作。但是当我用 hexo-helper-live2d 加载到博客中时,每次刷新页面只会随机加载一个,然后再也不会随机到另外三个动作,而是不断重复加载到的这个动作。

@EYHN @xiazeyu

@Nick-Hopps
Copy link
Author

Nick-Hopps commented Mar 1, 2020

顺便请问一下,我设置了 "hit_area",但是无论用 "tap_head" 还是 "flick_head" 都没用,点击头部只会切换表情。

我的 motion 设置如下:

{
  "motions":
  {
    "idle": [
      {"file": "mtn/idle_01.mtn", "fade_in": 2000, "fade_out": 2000},
      {"file": "mtn/idle_02.mtn", "fade_in": 2000, "fade_out": 2000},
      {"file": "mtn/idle_03.mtn", "fade_in": 2000, "fade_out": 2000},
      {"file": "mtn/idle_04.mtn", "fade_in": 2000, "fade_out": 2000}
    ],
    "tap_body": [
      {"file": "mtn/tap_body.mtn"}
    ],
    "flick_head": [
      { "file":"mtn/flick_head.mtn"}
    ]
  }
}

@Nick-Hopps
Copy link
Author

Nick-Hopps commented Mar 2, 2020

看了一天的代码,终于找到问题了。

首先是第一个问题:每次刷新页面只会随机加载一个,然后再也不会随机到另外三个动作,而是不断重复加载到的这个动作。

解决方法

修改 cModel.js 的第 369 行开始的 if 语句:

if (this.motions[name] == null)
{
    this.loadMotion(name, this.modelHomeDir + motionName, function(mtn) {
        motion = mtn;

        thisRef.setFadeInFadeOut(name, no, priority, motion);

    });
}
else
{
    motion = this.motions[name];


    thisRef.setFadeInFadeOut(name, no, priority, motion);
}

改为

if (this.motions[motionName] == null)
{
    this.loadMotion(motionName, this.modelHomeDir + motionName, function(mtn) {
        motion = mtn;

        thisRef.setFadeInFadeOut(name, no, priority, motion);

    });
}
else
{
    motion = this.motions[motionName];


    thisRef.setFadeInFadeOut(name, no, priority, motion);
}

第二个问题:设置 "tap_head" 或 "flick_head" 都没用,点击头部只会切换表情。

解决方法

修改 cManager 的第 89 行:

this.models[i].setRandomExpression();  // 把这个注释掉,改成:
this.models[i].startRandomMotion(cDefine.MOTION_GROUP_FLICK_HEAD,
        cDefine.PRIORITY_NORMAL);

@xiazeyu @EYHN 两位大佬方便的话给我这个 issue 标记一下吧,说不定别人也有类似的问题

@GlowZhou
Copy link

GlowZhou commented Mar 5, 2020

你好,我也遇到了和你一样的问题,然后按你的方式改了node_modules\live2d-widget\src里的cModel.js和cManager.js里的部分,可惜我这个问题还是没有修复好,还是只能一次刷新出现一种循环待机动作和一种点击动作

@Nick-Hopps
Copy link
Author

Nick-Hopps commented Mar 5, 2020

你好,我也遇到了和你一样的问题,然后按你的方式改了node_modules\live2d-widget\src里的cModel.js和cManager.js里的部分,可惜我这个问题还是没有修复好,还是只能一次刷新出现一种循环待机动作和一种点击动作

修改之后要重新编译,我没说而已啊

具体是先执行 npm run inst:devnpm run build:prod,之后再 hexo g -f 就可以了

@GlowZhou
Copy link

GlowZhou commented Mar 5, 2020

多谢,已经可以正常展示不同的动作,帮大忙了

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants