加入
发新帖
发表于 2014-4-13 00:42 | 查看: 2303| 回复: 14



类似吞食天地这种横版打斗游戏, 实现的机制是怎么样的呢?

比如如何判断玩家角色击中对手? 取精灵什么区域作为击中判定?

跳起来是否会影响到击中判断?

哪位有这方面的经验,请分享一下吧.

收藏回复 显示全部楼层 道具 举报

发表于 2014-4-13 01:05
可以参考mugen及其教程

我想就是设定招数的攻击区域,和角色(可被攻击)区域
按动画的每帧来设定

回复 显示全部楼层 道具 举报

发表于 2014-4-13 01:07
然后,这里其实是三维的空间
所以计算上,要加上一维
然后各区域,或者伤害的作用范围,要有一定的厚度(纵轴)

回复 显示全部楼层 道具 举报

发表于 2014-4-13 02:00
我用C2做過一部份,當時是想做類似FC大盜五右衛門那類的。用的是C2下8-direction形式的設置,無地心引力,跳躍要自己用函數去模擬。碰撞是一個非常大的問題,因為會有斜向/縱向跳躍的狀況發生。

簡單的說,當初的做法是:玩家真正操控的是影子,其他的是"演"出來的。

回复 显示全部楼层 道具 举报

发表于 2014-4-13 10:03
简单的做法自然是把所有人物都看作是长方形来做碰撞检测,做得更精确一些的话,需要用任意多边形的碰撞检测。

btw,我想到一个比较高效的trick,和 opengl 做深度检测的方法一样。

这个方法简单地说就是用像素颜色的叠加次数来判断是否发生了碰撞。

不管怎样,人物都是用图像展现的。假设我们现在在考虑两个人物(A和B)的碰撞问题,我们有一个在某个图像上绘制这两个人物的过程。我们把这个图像称为画布,把所有像素颜色初始化成无效的-1。

当我们绘制好 A 之后,再绘制 B 时,就可以检查每一个像素的颜色是否不是-1,如果不是-1则表示和 A 发生了碰撞。

这个方法的问题在于时间性能和空间性能。它需要你有一个比较大的内存空间用于存储这个用来做碰撞检测的画布,同时,每一帧动画绘制时都需要你遍历很多像素来判断碰撞。不过考虑到现在的硬件性能,比如超大的内存之类,所以空间性能不是个大问题,主要是时间。当你不能很熟练地使用硬件加速的前提下,这样的碰撞检测大概会很容易让帧数下降。

不过这个方法有一个优点,它能很容易地通过画布的绘制精度来控制性能,当然,其实就是牺牲碰撞检测的精度来换取更高的帧数。你可以把画布缩小,同时也缩小人物 A 和 B,那么每一帧需要检查的像素数量就减少了。

另外,这个方法会需要你自己实现人物的绘制过程(或者想办法获取图形引擎的图形绘制缓冲区数据),这里会需要一点其它的知识。

回复 显示全部楼层 道具 举报

发表于 2014-4-13 10:15
碰撞。。。我真心不想碰到。。。

回复 显示全部楼层 道具 举报

发表于 2014-4-13 11:22
orange030 发表于 2014-4-13 01:05
可以参考mugen及其教程

我想就是设定招数的攻击区域,和角色(可被攻击)区域

很有收获,看看去.

回复 显示全部楼层 道具 举报

发表于 2014-4-13 11:25
大饼土博 发表于 2014-4-13 10:03
简单的做法自然是把所有人物都看作是长方形来做碰撞检测,做得更精确一些的话,需要用任意多边形的碰撞检测 ...

感谢写了这么多

碰撞检测我想偷懒用Unity 现成的机制.

现在主要的问题是如何完美实现击中判断.  比如击中的厚度问题, 以及跳跃击中的处理.

回复 显示全部楼层 道具 举报

发表于 2014-4-13 11:27
jomo 发表于 2014-4-13 02:00
我用C2做過一部份,當時是想做類似FC大盜五右衛門那類的。用的是C2下8-direction形式的設置,無地心引力, ...

这种打斗的游戏,影子是固定形状的吗? 还是每个动作不同,影子的形状也不同,能对别人造成伤害的部位在影子上的位置也有所不同?

点评 回复 显示全部楼层 道具 举报

jomo 发表于 2014-4-13 13:54
最簡單的就是形狀固定的影子互打; 再複雜點就是影子只做控制,上方飄著一個帶有collision check的sprite。 第一種直接用影子外緣來判斷碰撞應該不是你要的噢,那個做法較簡略。
发表于 2014-4-13 12:19
肉山大魔王 发表于 2014-4-13 11:27
这种打斗的游戏,影子是固定形状的吗? 还是每个动作不同,影子的形状也不同,能对别人造成伤害的部位在影子 ...

记得以前那些游戏,影子形状基本是固定的,不过有些会跳起来后变得更小
伤害判断都很模糊的,直接是角色相对角色的位置
大抵就如地板所说,实质就是影子打影子,其他都只是拿来看的

而我觉得,碰撞应该很简单的,因为实质,就是一个二维平面,用二维碰撞就能解决了
游戏也并非是三维的,而是纯二维的

整体直接用Unity二维方案就能完美解决的。

回复 显示全部楼层 道具 举报

发表于 2014-4-13 12:41
就像是lf2 那种模式的动作游戏,以前玩lf2改档所以我现在做这种类型的基本就是frame系统+body、hit区域的做法

回复 显示全部楼层 道具 举报

发表于 2014-4-13 23:42
根据Orange的建议, 去看了mugen的文档, 似乎他们是样做的.

每帧都动画都有若干碰撞区域, 分为攻击区和击中区. 当A的攻击区与B的的击中区重合,那么判定A攻击B.以此类推

此外每帧动画的攻击区还有优先级, 以判断两个角色互相攻击时,谁出招击中对方.

回复 显示全部楼层 道具 举报

发表于 2014-4-14 01:07
我有可能以后都用不上碰撞檢測...

回复 显示全部楼层 道具 举报

发表于 2014-4-16 13:33
用Greenfoot做过kof的demo,我用的是帧动画+矩形检测,如果觉得一个矩形不精确,那就用矩形组。打出去的手脚(武器)用连线的方法检测。

回复 显示全部楼层 道具 举报

发表于 2014-4-16 13:51
upupzealot 发表于 2014-4-16 13:33
用Greenfoot做过kof的demo,我用的是帧动画+矩形检测,如果觉得一个矩形不精确,那就用矩形组。打出去的手 ...

之前按照这种方法实现了一把, 感觉有点过头.

对于街霸这种对打的游戏适合, 对于吞食天地这种简单横版游戏,是不是有点过了?

点评 回复 显示全部楼层 道具 举报

upupzealot 发表于 2014-4-16 18:44
额,矩形框和线段的检测应该很简单啊,矩形还是不带角度的呢。
您需要登录后才可以回帖 登录 | 加入

搜索

繁體   

返回顶部