游戏中人物技能输出的处理.

发布于 2021-11-04 18:49:20 字数 518 浏览 931 评论 10

遇到一个比较麻烦的问题:

现在有一个动作游戏:W,S,A,D,J 分别表示 上,下,后,前,攻击. 并且人物有一些出招表:前+下+前+攻击,下+前+攻击,前+下+后+前+攻击

要实现人物的出招表.现在已经有一个 int getKeyCode(); 方法,返回当前按键的ASCII码. 和一个 boolean isFacingRight(); 方法, 返回当前人物是否面向右.

我目前的方法是比较笨的:

将技能声明为String[2],0位放面向右的,1位放左的.比如 下+前+攻击:

String[] skill = {"SD","SA"};

将输入的按键转换成String,并且用StringBuffer拼接.当 keyCode==攻击 判断:StringBuffer是否以对应的技能字符结尾.如果true-输出技能,清空StringBuffer. false-清空StringBuffer.

总觉得是不是还有更好的方法? 用int操作.或者用某种结构处理技能匹配?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

牵你的手,一向走下去 2021-11-11 01:39:49

我最初的匹配是有问题的,因为 比如有2个技能 后+下+前+技能  下+前+技能. 当前操作列队为"后+下+前".那么用endWith()判断就有问题了.2个都符合

我又想了一个方法,就是在ascii码上操作:

比如技能 下+前(面向右SD,左SA) ascii--> s-115,d-100,a-97. 从右向左减法,所以 下+前技能 可以用-15和-18表示.

将键盘输入ascii放入列队里(除攻击键).匹配算法就变成

if(keyCode == 攻击){
 将列队依此取出做减法,最后判断是否为-15或-18
}

这样一来,不用判断方向,也不会出现匹配重复(操作键只有W(119),A(97),S(115),D(100)),效率肯定是快了不少.

落墨 2021-11-11 01:21:35

想到一起去了,最开始我也考虑过用树的形式表现技能.比如有2个技能 前+下+前, 前+下+后 前 / 下 / 前 后 先照此生成一些技能树,按键的最后一个按钮为根节点.再用前序遍历. 但是2叉树结构肯定是不行的,应该是4叉树,哈哈.. 晚上写个4叉树.... -_-!!!

冷默言语 2021-11-11 01:19:15

嗯, 祝你成功

梅窗月明清似水 2021-11-11 01:16:59

建议设置一个先入先出(FIFO)的队列, 队列大小根据实际技能组合的长短适度调整, 考虑到容错率, 应该是最长组合的一倍左右, 按方向的时候压入, 按攻击的时候取出, 并判断组合.

技能组合应该是一棵树, 取出第一个方向键, 从树的跟开始, 找到第一个子则取第2个键, 继续往下找子节点, 找不到可以容错1到2次, 再取一到两个键在当前节点下找, 找到则继续往下, 直到没有子节点则触发技能, 找不到则退回根节点继续循环.

只是个思路, 希望有帮助

青萝楚歌 2021-11-11 00:54:14

谢谢~key-value.嗯``` 我晚上试下.肯定是可以的,看看效率吧.

够钟 2021-11-10 09:32:14

写一个Hash函数,然后事先把所有可能的按键招数事先根据按键ASCII Hash(因该不会有重复)进Map中,然后在读取按键状态函数中不断读入按键信息放到队列Buffer中(超过一定毫秒就清空队列,表示无效或超时按键),对于连续有效的这个队列进行Hash然后检索对应的Map中的招数,有就发招,无则是出错招.

这个对于某些招数比如按住键(集气)等需要某些处理,但中心思想不变.

甜柠檬 2021-11-09 22:39:11

用一个按键队列???可否

执手闯天涯 2021-11-09 16:00:04

我现在求的就是匹配算法.其他的都做好了. 您还是详述下吧? 我上面写的匹配算法太烂了.

裸钻 2021-11-09 14:16:28

这个要求和普通的匹配算法还是不一样的. 我只要判断是否以某个技能字符结尾就可以了.不是包含.不过还是谢谢你. 我的初衷是想能不能用其他的形式表现技能.不用String,因为我们可以得到按键的ASCII.

狠疯拽 2021-11-05 15:29:13

设置一个按键缓冲区(长度取决于最大出招按键数),按键输入以队列的形式进行入队.然后每次按键触发一个匹配算法来匹配你定义的出招按键表,一旦匹配成功清空缓冲释放大招.至于匹配算法则很简单,不再详述.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文