mugen吧 关注:79,993贴子:1,495,726

用一个变量控制16个开关的方法

只看楼主收藏回复

这文章是写给要节省变量,且略懂二进制与位元运算的玩家使用.
先谈二进制, 一般我们用的是十进制, 十进制可转成2进制,如下转换, 转换规则请自行查询关键字"二进制"
0 => 0
1 => 1
2 => 10
3 => 11
4 => 100
5 => 101
6 => 110
7 => 111
2进制表示的数是0和1的组合, 因此可以当开关来使用. 将下列二进制数字以白话文描述开关
0 => 全关
1 => 第一个开启
10 => 第一个关闭,第二个开启
11 => 第一个第二个开启
100 => 第三个开启,其他关闭
101 => 第一和第三个开启,第二个关闭
110 => 第二和第三个开启,第一个关闭
111 => 第一和第二个和第三个开启
把二进制数转回十进制也可以达到同样控制效果.
实作的通用写法:
假设您要控制第N个开关.一个变量var(40)是开关
令一个数k = 2的N次幂(N = 0,1,2....,16)
检测第N个开关有无开启的方式是
trigger1 = var(40) & k
开启第N个开关的方式是
var(40) = var(40) | k
关闭第N个开关的方式是
trigger1 = var(40) & k
var(40) = var(40) ^ k
&, |, ^ 是位元运算子, 请劳驾自行搜索
N我目前测到16是可以用的,理论上应该可以到32
实作测试一段用按鍵开关着色与半透明的代码如下,用第二和第十六个开关调整颜色和透明度
[State -1]
type = VarSet
trigger1 = roundstate = 1
v = 40
value = 0
[State -1]
type = VarSet
trigger1 = command = "x"
v = 40
value = var(40) | 2
[State -1]
type = VarSet
trigger1 = command = "y"
Trigger1 = var(40) & 2
v = 40
value = var(40) ^ 2
[State -1]
type = trans
Trigger1 = var(40) & 2
trans = addalpha
alpha = 50,50
[State -1]
type = VarSet
trigger1 = command = "a"
v = 40
value = var(40) | 65536
[State -1]
type = VarSet
trigger1 = command = "b"
Trigger1 = var(40) & 65536
v = 40
value = var(40) ^ 65536
[State -1]
type = palFX
Trigger1 = var(40) & 65536
time = 1
add = 60,0,0


IP属地:中国台湾1楼2018-06-15 21:27回复
    这对于我这数学几何菜鸟来说,完全就是看天书一样@muigoloroh


    IP属地:广东来自Android客户端2楼2018-06-15 22:56
    回复
      2025-12-25 17:07:18
      广告
      不感兴趣
      开通SVIP免广告
      65536太长不好书写和记忆
      用科学计数法来表达就是2**16
      一个整型变量最大可赋予31个开关
      2**0
      2**1

      2**30
      2**31已经超过mugen可以接受的整数上限了
      MUGEN整数最大值是2**31-1即2147483647


      3楼2018-06-15 22:57
      回复(5)
        学习了


        IP属地:江苏来自Android客户端5楼2018-06-15 23:37
        回复
          天书


          IP属地:四川来自Android客户端6楼2018-06-15 23:40
          回复
            这么用节省是节省,但都这么用怕不是头都要爆炸。一般helper都够用,不够也能用explod凑。不过一帧内的记录explod和helper就会有点问题了...


            IP属地:上海来自Android客户端8楼2018-06-16 00:06
            回复(6)
              这个可以有


              IP属地:广东来自手机贴吧9楼2018-06-21 11:19
              回复(3)
                整形变量用的是int
                4字节,范围从-2^31~2^31-1
                从1(2^0)到2^30次方一共可以并31个开关。
                我做过一个简单探测对方招数发生帧数和性能的记忆,单个变量整合成stateno+两位发生帧数+两位性能探测,然后两位就可以分1 2 4 8 16 32六个01位,还是挺好用的。


                IP属地:四川10楼2018-06-30 17:45
                收起回复
                  2025-12-25 17:01:18
                  广告
                  不感兴趣
                  开通SVIP免广告
                  缺点只是不适合表示多个选择,就算自己看得懂,让一个不懂的人改一个设定肯定还是一个数字简单


                  IP属地:浙江来自Android客户端11楼2018-06-30 19:59
                  回复
                    这确实省了不少变量,但别人不一定看得懂吧


                    IP属地:英国来自Android客户端12楼2018-06-30 21:01
                    回复
                      这个我2年前就讲过 也有人在更早前讲过 不过没什么意义 因为99%的人都用不到 或者说不会用


                      IP属地:河南来自Android客户端13楼2018-07-01 02:53
                      回复
                        30个


                        IP属地:广东14楼2018-07-23 22:23
                        回复
                          我觉得我的脑子不够用


                          IP属地:广东来自Android客户端15楼2018-07-29 22:52
                          回复
                            鱼姐,想你了。


                            IP属地:安徽17楼2019-04-28 00:41
                            回复
                              2025-12-25 16:55:18
                              广告
                              不感兴趣
                              开通SVIP免广告
                              好东西,今天才刚看到,挖坟以示感谢(


                              IP属地:河南18楼2019-06-06 11:00
                              回复