C#制作GameMaker插件-正则表达式 脚本
Cricket 发表于 2020-08-09 05:27:15 232

制作了简单的正则表达式插件,包含Extension和几个script,导入yymp即可。

下面放出示例

fun_IsMatch

// 判断是否是邮箱,返回真假
if(fun_IsMatch("1126390395@qq.com", @"^\w+@\w+\.\w+$"))
    show_debug_message("是邮箱");

fun_Matches

// 根据正则表达式匹配字符串,返回数组
var matchs = fun_Matches("make咯咯 maze and manage黑 to measure it", @"\bm\S*e\b");
for(var i=0; i<array_length_1d(matchs); i++)
    show_debug_message(matchs[i]);

fun_Split

// 根据正则表达式分割字符串,返回数组
var list = fun_Split("Hello我.World的的.dayone", "\\.");
for(var i=0; i<array_length_1d(list); i++)
    show_debug_message(list[i]);

fun_Replace

// 替换字符串,返回新的字符串
fun_Replace("Hello   World   ", "\\s+", "_");

关于制作插件

最近在用C#制作GameMaker插件,记录下要点,防止自己忘记。


导出Dll插件

nuget包: DllExport

参数或返回值编码(解决中文乱码)

UnmanagedType.LPUTF8Str

参数

using System.Runtime.InteropServices;

[DllExport]
public static double IsMatchPartern([MarshalAs(UnmanagedType.LPUTF8Str)] string input, [MarshalAs(UnmanagedType.LPUTF8Str)] string pattern)
{
    if (Regex.IsMatch(input, pattern))
        return 0;
    return -1;
}

返回值

using System.Runtime.InteropServices;

//获取匹配字符串
[DllExport]
[return: MarshalAs(UnmanagedType.LPUTF8Str)]
public static string getMatchsString(double match, double index)
{
    return MatchList[(int)match][(int)index].ToString();
}

引用第三方dll报错

如果写插件时引用了别的dll,当运行GameMaker项目时可能会报错 TypeInitializationException FileNotFoundException

暂时找到的解决方法是打包运行或者yyc模式运行

相关链接

微软官方:标识如何将参数或字段封送到非托管代码。

最后于 1月前 被Cricket编辑 ,原因:
上传的附件:
最新回复 (1)
  • yunzl 发表于 2020-09-13 06:58:36
    0 2
    嗨,能制作个模式匹配的么