利用正则表达式实现搓招

这里分享用正则表达式实现搓招逻辑,我们玩街机的时候经常需要设置键盘,以及更改搓招按键。所谓搓招就是设置一个按键输入的序列类似于 【前+下+前:A】
就是我们常用的升龙拳的撮招序列。撮招逻辑有很多种实现方式,正则表达式方式个人感觉是比较灵活的,通俗的。
设计大概如下
我们把所有的按键输入看作是一个stream,然后从stream中去匹配所有撮招规则,一旦有符合的招数产生时便抛出事件,清理stream,继续侦听。对象设计上,我们考虑将这个功能封装成一个可编程的键盘。就像现实中,我们购买的多功能键盘一样可以自己定义功能,这里我们要定义的是一个带撮招功能的键盘。
在创造这个stream之前需要将一些信息单位化。比如撮招中的间隔时间,我们可以把10ms看作是一个字符用*代替,各种按键也转换为字符。这样你的输入流就会变成这样的字符串“F39★★F40★F37★★F40★F37★F38★★★★F40F39★F37★★★F83F68F70”现在,我们便可以用正则表达式来找寻我们需要的招式了。
例如 “right(★){0,3}down(★){0,3}right(★){0,3}attack”
这样一招就表示按键右按下0-3个延迟单位再按键下延迟0-3个单位再按键右0-3个单位再按键attack,匹配的时候需要将up,down,attack转化成按键定义例如F12,F23再进行匹配。
按键定义这样是为了避免字符前后冲突。
right,down是方便用户编写动作的表达。这样,便可以实现正则表达式轻松替换技能配置,和按键间隔时间调整。有没有方便?
阅读全文......

在molehill2D引擎中利用显卡做拣选

最近一直在研究更好的拣选方法。其实,是因为想绕开射线法。总感觉射线法检测流程太繁琐,懒得去弄。之前跟同事@donaldwu在聊到这个拣选的时候他给了我一个很好的思路,即让显卡来帮助拣选。之前有看过Away3D做过这个事情,但是它只是针对单个模型的拣选。这里要分享的是直接得到画面的拣选结果,即所点即所得。重申一下,为什么2D引擎要做设个事情,因为我的2D引擎是支持Z轴的。所以要支持带深度的拣选。 阅读全文......