1
canesten 2015-06-10 11:52:19 +08:00
一般的格斗游戏都是按帧判定
逐帧的做逻辑 在每帧的时候判断每个角色的状态 每个动作的判定帧都不一样 有的快有的慢 而且每个动作的判定优先级也不一样 有的高有的低 如果你深入玩过街霸就知道了 |
2
canesten 2015-06-10 11:56:20 +08:00
为什么街霸四里面杀意隆很屌
就是因为他的下轻腿特别好按 判定帧又很靠前 所以很容易抢到判定优势 打中以后可以接很强大的连续技 |
3
lucky2touch OP @canesten 恩,我的意思是实际上已经到了某帧判定的时候,具体代码逻辑如何设计,或者有没类似例子,比如到某一帧的伪代码?
因为判定涉及到状态变化,这个状态变化应该是同时发生的。但是代码来说是顺序的,所以有问题,简单的来说如果某次逻辑计算是 update() { if player_one->isattacking{ player_two->dealdamage player_two->changestate } if player_two->isattacking{//上一句代码已经改变状态 player_one->dealdmage player_one->changestate } } 我个人认为的逻辑是 update() { if player_one->isattacking{ recordattackdata } if player_two->isattacking{//上一句代码已经改变状态 recordattackdata } replayattackdata } |
4
chairuosen 2015-06-10 13:53:43 +08:00
第一帧按下的动作,在第二帧执行,计算出结果但不写入,在第三帧写入?
|
5
Mutoo 2015-06-10 14:06:23 +08:00 1
这个是经典的双缓冲问题咯 看文中的例子,将双缓冲用于状态:
http://gameprogrammingpatterns.com/double-buffer.html |
6
lucky2touch OP @Mutoo 刚正好搜到这个模式设计,资料看起来不错,赞!
|
7
jnduan 2015-06-10 14:39:34 +08:00 1
|
8
lucky2touch OP @jnduan 这个了解基本原理还不错,不过还是讲得有点浅。
|
9
w359405949 2015-06-10 16:56:47 +08:00
应该是先把所有检测到的碰撞整合起来,然后再依次处理碰撞相对应的逻辑。
这样也可以避免状态递归的问题。 |
10
endrollex 2015-06-10 17:01:43 +08:00
isattacking这个逻辑不对,如果发飞行道具呢,这个attack是跟人物状态无关的
然后格斗游戏还有各种霸体,刚体,无敌时间,即在受创的情况下攻击 |
11
MountainRain 2015-06-10 17:08:11 +08:00
晶晶同学,你最近搞这么先进的东西了哇
|
12
lucky2touch OP @endrollex 写的是伪码...... attack为什么与人物状态无关?如果发飞行道具就是飞行道具的attack状态吧。
|
13
lucky2touch OP @w359405949 依次处理就会有类似的问题,双缓冲估计是很好的模式,回去试试看......
|
14
w359405949 2015-06-10 17:28:54 +08:00
@lucky2touch 除了碰撞,还有时间,BUFF等都要进行这样的处理。
|
15
gamingcat1234 2015-06-10 18:15:53 +08:00
你思路有问题。
google 关键字: street fighter 4 hitbox |
16
gamecreating 2015-06-10 18:19:22 +08:00
业务逻辑实现有问题 你那个update
|
17
lucky2touch OP @gamingcat1234 这个问题不是hitbox的问题好吧
|
18
lucky2touch OP @gamecreating 然后呢?
|
19
tabris17 2015-06-10 18:53:31 +08:00
我猜是每个角色都有一块“杀伤器官”,按攻击后“杀伤器官”被激活,如果“杀伤器官”碰触到对方身体范围就判定对方受到伤害
|
20
Jasio 2015-06-10 20:01:19 +08:00 2
|