使用易语言+live2d.dll光速开发live2d鼠标追随效果

没错,就是光速开发,一共17行代码(折腾了两天折腾出17行代码23333)。

先上效果:

首先需要下载别人写好的live2d.dll模块https://github.com/ytx1991/Azusa-Live2D,作者ytx1991大佬(感谢大佬,今后一定要多多支持他)

新建一个windows窗口程序,先引用一个api,用它来启动线程。为什么不用自带的启动线程()呢?自带的启动完以后没有给出线程id(注意是线程id,不是线程句柄啊啊啊,这个我折腾了好久)。第一、二、四、五个参数都写0就可以。第三个参数写被启动的子程序的指针(&子程序名 用这个获取指针),第六个写一个变量,用来记录线程id

%title插图%num
.版本 2

.DLL命令 CreateThread, 整数型, "kernel32", "CreateThread"
    .参数 写0就行, 整数型
    .参数 写0就行啊, 整数型
    .参数 要启动的子程序, 子程序指针
    .参数 参数, 整数型
    .参数 写0, 整数型
    .参数 线程id, 整数型, 传址

再引用一个live2d.dll中的命令。看这个名字就知道,这个用来启动live2d的模型。第一个参数要写启动live2d的线程的线程id

%title插图%num
.版本 2

.DLL命令 Live2DStart, 逻辑型, "Live2D.dll", "Live2DStart"
    .参数 hid, 整数型

然后就要注意了,同目录下一定要有res文件夹,里面两个文件,分别是model.txt和config.txt。这两个文件记录了live2d的启动参数

先来写model.txt,里面写live2d模型的路径(可以是绝对路径,也可以是相对路径)。如果要加载多个模型,不同路径之间用分号(;)分隔开。

%title插图%num

然后写config.txt,里面是模型的大小、位置、数量。第一个数字是模型的x坐标,第二个y坐标,第三个模型的横向大小,第四个模型的纵向大小,第五个是模型的数量

%title插图%num

好了配置文件写完了,接下来就该继续写程序了。先写一个线程,在启动窗口里启动这个线程。注意还要新建一个程序集变量(就是图里的线程id),类型整数型

%title插图%num

然后按一下运行,就能看到live2d模型出现在桌面右下角

%title插图%num

但是我们要做到的是鼠标追随效果。live2d.dll里有一个命令,可以调整脸部的位置(具体哪个参数决定哪个位置可以去下载的文件里的 示例程序里试一下)。引用一下这个命令。第一个参数是线程id,第二、三、四个是改变模型脸部朝向的三个坐标,第五个是模型的索引(编号从0开始,如果只加载一个模型,就写0)

%title插图%num
.版本 2

.DLL命令 SetFaceDirection, 逻辑型, "Live2D.dll", "SetFaceDirection"
    .参数 hinst, 整数型
    .参数 x, 小数型
    .参数 y, 小数型
    .参数 z, 小数型
    .参数 index, 整数型

新建一个时钟,周期10(太大显得比较卡,太小没必要),然后就可以用上刚才的SetFaceDirection。这里直接给出代码吧,我不知道怎么解释。。。

%title插图%num
.版本 2

.子程序 _时钟1_周期事件
.局部变量 x, 整数型
.局部变量 y, 整数型

x = 取鼠标水平位置 ()
y = 取鼠标垂直位置 ()
.如果 (x - 1800 ≥ 0)
    .如果 (y - 800 ≥ 0)
        置入代码 (#使用c的dll调用方式)
        SetFaceDirection (线程id, (x - 1800) ÷ 150, -(y - 800) ÷ 150, 0, 0)

    .否则
        置入代码 (#使用c的dll调用方式)
        SetFaceDirection (线程id, (x - 1800) ÷ 150, (800 - y) ÷ 400, 0, 0)
    .如果结束

.否则
    .如果 (y - 800 ≥ 0)
        置入代码 (#使用c的dll调用方式)
        SetFaceDirection (线程id, -(1800 - x) ÷ 400, -(y - 800) ÷ 150, 0, 0)

    .否则
        置入代码 (#使用c的dll调用方式)
        SetFaceDirection (线程id, -(1800 - x) ÷ 400, (800 - y) ÷ 400, 0, 0)
    .如果结束

这里有一个置入代码。这行非常重要,不写的话就会这样(这个我折腾了一天多,才找到解决方法)

%title插图%num

被置入的代码可以去http://bbs.eyuyan.com/read.php?tid=144131这里找到,感谢 云外归鸟 大神

最后再来一个命令,引用这个。这个目测用于终止live2d模型(dll作者的demo程序用了这个,这里也应该用一下吧)。这里的参数是线程id

%title插图%num
.版本 2

.DLL命令 Live2DAbort, 逻辑型, "Live2D.dll", "Live2DAbort"
    .参数 hinst, 整数型

在将被销毁时加入这个命令

%title插图%num

至此17行代码全部完成。最后感谢大佬们的铺路。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注