Mugen 论坛
首页
注册

【IkemenGo】人物教程1:Map

White
白绝,论坛管理
2022-01-27 15:30:51

人物新特性——Map

众所周知,Mugen的人物变量是有限的,即便算上Helper的变量,由于Helper的数量也是有限的,所以还是有限制。为此甚至出现了根据二进制位实现的一个变量多个开关的教程。IkemenGo解决这一问题的一个重要改进就是引入了Map。

Map实际上是编程的概念,特别是Go语言中Map非常常用。实际上Map就是一个Key-Value形式的变量储存结构,可以理解为“变量名—变量值”的一个集合。IkemenGo允许人物定义Map,并增加或修改其中的变量。

IkemenGo设置的Map的变量值类型为整型(int)或者浮点型(float),而变量名为一个字符串。

静态设置Map

设置人物Map的一个方式在人物的DEF文件中定义Map,这可以为其初始化内容。定义的方法很简单的,因为Mugen的配置文件恰好就是Key-Value的形式。只需将每一个变量按 `变量名 = 变量值` 的格式写入 `[Map]` 即可。例如:

[Map]
a = 5
b = 1000
c = 1.2

这样就为人物创建了一个含有三个变量的Map。在人物代码中,通过格式为 `Map(变量名)` 的Trigger获取其中的变量。例如:

trigger = Map(b) >= 500

很简单,不多解释。

动态设置Map

只是在DEF文件中定义Map的话远远不够,IkemenGo为此提供了新的sctrl:

MapAdd,为人物Map变量增加值:

map = "map_name " (string)	;参数map指定变量名
value = expr (int or float)	;参数value指定增值

PS:map的含义有所不同,此处指的是一个Key-Value,而通常的map指的是Key-Value的集合。

MapSet,为人物Map变量(包括DEF设置的变量)设置值,参数和上面是一样的。

map = "map_name" (string)	;参数map指定要设置的变量名
value = expr (int or float)	;参数value指定变量值

例如,下面的代码实现若变量b的值大于5则设置变量a的值为

[State test]
trigger1 = Map(b) > 5
type = MapSet
map = "a"
value = 1

此外,还有下面几个sctrl,参数和上面的是一样的。

  • ParentMapAdd
  • ParentMapSet
  • RootMapAdd
  • RootMapSet

看名字就知道了,由Helper为其Parent或者Root设置其Map

  • TeamMapAdd
  • TeamMapSet

这两个sctrl为团队所有队友设置其Map

此外Helper在创建时可以设置参数:

ExtendsMap = 1

值为1表示其继承Parent的Map,默认为0