找回密码
 点一下
查看: 6516|回复: 24

格斗类按键系统

[复制链接]
发表于 2009-6-20 14:32:26 | 显示全部楼层 |阅读模式
这个系统就是格斗类游戏的按键系统
它的功能是辨识摇招
比如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
蓄力后的记录保持时间还是原来的保持时间

键盘控制.w3x

37 KB, 下载次数: 256

评分

参与人数 1威望 +5 收起 理由
血戮魔动冰 + 5

查看全部评分

发表于 2009-6-20 18:29:57 | 显示全部楼层
oooo,搓招呢
回复

使用道具 举报

发表于 2009-6-20 19:35:57 | 显示全部楼层
缺少C、D键~~恩恩~~要四键的~~ 
回复

使用道具 举报

 楼主| 发表于 2009-6-20 20:13:29 | 显示全部楼层
支持4键
演示中VCXZ为ABCD
回复

使用道具 举报

发表于 2009-6-20 21:45:48 | 显示全部楼层
孔明的创意无限阿……
这个丢给某人做键盘控制地图很合适罢~
回复

使用道具 举报

 楼主| 发表于 2009-6-20 22:35:42 | 显示全部楼层
原打算自己做的
结果因为某个模型弄的我崩溃了
就是魔兽最开始启动时的背景

做成地形装饰物后一选择就报错……
回复

使用道具 举报

发表于 2009-6-20 23:59:43 | 显示全部楼层
那能不能放弃这东西。要是这个系统出来加上很棒的动作应该会很赞
回复

使用道具 举报

发表于 2009-6-21 08:05:40 | 显示全部楼层
很有创意
回复

使用道具 举报

 楼主| 发表于 2009-6-21 08:06:17 | 显示全部楼层
需要模型支持呢
……
自己完成不了
我不会做模型
回复

使用道具 举报

发表于 2009-6-21 08:55:04 | 显示全部楼层
sxlrose有模型~~八神和草雉~~
回复

使用道具 举报

发表于 2009-6-21 09:37:15 | 显示全部楼层
收藏了~~~

用的着~~

我有 八神 草薙 神乐 和 大蛇

本来要做个 KOF前传之三神器

搁浅了
回复

使用道具 举报

发表于 2009-6-21 10:20:01 | 显示全部楼层
鬼一大人的动作技能很华丽……合作罢。
回复

使用道具 举报

 楼主| 发表于 2009-6-21 11:22:51 | 显示全部楼层
合作?
用不着
一切都交给鬼一大人
回复

使用道具 举报

发表于 2009-6-21 12:08:43 | 显示全部楼层
半年后的鬼一大不知道jass学得怎么样了~
回复

使用道具 举报

发表于 2009-6-21 12:09:42 | 显示全部楼层
都是在我们这些虫蟊面前,都是牛人
回复

使用道具 举报

 楼主| 发表于 2009-6-21 12:14:09 | 显示全部楼层
引用第13楼巧樂滋聖代于2009-06-21 12:08发表的  :
半年后的鬼一大不知道jass学得怎么样了~
当年的鬼一大人也不回J么?
回复

使用道具 举报

发表于 2009-6-21 12:17:55 | 显示全部楼层
当初我离开时鬼一大开始学J~忘了跟谁学了~好像是卡卡~
回复

使用道具 举报

 楼主| 发表于 2009-6-21 12:22:06 | 显示全部楼层
我是在你回来时学的……

你走的时候我还不会呢……
忽然想起来还有很多骗了分缺没完成的技能呢……
回复

使用道具 举报

发表于 2009-6-21 13:37:10 | 显示全部楼层
感觉这帖里面有两个用t高手阿……
回复

使用道具 举报

发表于 2009-6-25 14:27:44 | 显示全部楼层
侃侃
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-22 02:54 , Processed in 0.286272 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表