|
这个系统就是格斗类游戏的按键系统
它的功能是辨识摇招
比如KOF97中的↓→A这类招数的辨识
[jass]
globals
timer array udg_KeepTimer
integer array udg_ValueNum
constant real udg_KeepTime = 0.5 //这个是保持时间,也就是当这些时间内没有按键输入,那么前面的按键不算连续输入的内容。
boolean array udg_HoldKey
endglobals
function ClearValue takes nothing returns nothing
//计时清空按键记录
local integer i = 1
loop
if GetExpiredTimer() == udg_KeepTimer then
if udg_HoldKey then
set udg_HoldKey = false
set udg_ValueNum = ModuloInteger(udg_ValueNum * 10, 100000000)
call TimerStart(udg_KeepTimer,udg_KeepTime,false,function ClearValue)
return
endif
set udg_ValueNum = 0
return
endif
endloop
endfunction
function ChangeValue takes player p,integer key returns nothing
//按键存储函数,用于存储按键顺序
local integer i = GetConvertedPlayerId(p)
set udg_ValueNum = ModuloInteger(udg_ValueNum * 10 + key, 100000000)
call PauseTimer(udg_KeepTimer)
call TimerStart(udg_KeepTimer,udg_KeepTime,false,function ClearValue)
endfunction
function JudgeAction takes player p returns nothing
//中心处理函数,用于控制各种出招,要注意每个动作触发的顺序,比如 ↓←↓←A一定要写在↓←A前面,否则↓←↓←A无法响应,总之就是代码长的在前面。
local integer i = GetConvertedPlayerId(p)
if (ModuloInteger(udg_ValueNum,1000000) == 313157) or (ModuloInteger(udg_ValueNum,1000000) == 313175) then
call BJDebugMsg("↓←↓←A+B")
set udg_ValueNum = 0
return
endif
if (ModuloInteger(udg_ValueNum,1000000) == 323257) or (ModuloInteger(udg_ValueNum,1000000) == 323275) then
call BJDebugMsg("↓→↓→A+B")
set udg_ValueNum = 0
return
endif
if ModuloInteger(udg_ValueNum,10000) == 1025 then
call BJDebugMsg("←→A")
set udg_ValueNum = 0
return
endif
if ModuloInteger(udg_ValueNum,10000) == 2015 then
call BJDebugMsg("→←A")
set udg_ValueNum = 0
return
endif
if ModuloInteger(udg_ValueNum,1000) == 315 then
call BJDebugMsg("↓←A")
set udg_ValueNum = 0
return
endif
if ModuloInteger(udg_ValueNum,1000) == 325 then
call BJDebugMsg("↓→A")
set udg_ValueNum = 0
return
endif
if ModuloInteger(udg_ValueNum,100) == 11 then
call BJDebugMsg("←←")
set udg_ValueNum = 0
return
endif
if ModuloInteger(udg_ValueNum,100) == 22 then
call BJDebugMsg("→→")
set udg_ValueNum = 0
return
endif
endfunction
[/jass]
代码如上
另外一些其他的触发请参考演示
用法也很简单
参考演示即可(演示很简单,甚至连单位的移动都没模拟,只是进行出招判断)
注意系统最多支持8个按键的招数(如←↓→←↓→A+B)
需要注意的是对于每个英雄的出招设置,
比如↓→A和↓→A+B(AB一起按)这两个不要同时出现,
这个无法判断
当然实际的格斗中也是不会有同时出现的情况的
另外如果招数使用了同时按键(如A+B)
要把所有的可能都写在条件里(57和75)
按键记录保持时间是0.5秒(constant real udg_KeepTime = 0.5)可以自行更改
已经添加了蓄力部分(方向键的蓄力)
按住超过保持时间(默认0.5)后才算蓄力完成
蓄力招数要在蓄力键后+0
比如→蓄←A的判断码是2015而不是215
蓄力后的记录保持时间还是原来的保持时间 |
评分
-
查看全部评分
|