横板游戏角色从【场景】下跳上【场景】站着如何实现,比如《忍者龙剑传》、《超级玛丽》、《宾尼兔大冒险》

按【跳跃】键,穿过上方的盒子,站在盒子上
按【下】+【跳跃】键跳下当前站立的盒子

由于碰撞盒子的存在,角色上方有障碍物讲被阻挡跳跃。

我目前的实现思路是:判断两碰撞盒子之间的相对位置,如果盒子在主角下方,则临时关闭碰撞属性。

不过有少许bug。

那么游戏厂商是如何【优雅】地实现在碰撞盒子上下跳跃的呢?


往上跳的时候把角色刚体关掉,下落的时候再开启

那么如果之前不能穿透的东西也会穿透了不是,比如问号砖 :joy:

编辑地图的时候给包围盒或者物体一个标签,哪些标签的包围盒可以穿透,哪些不能穿透,碰撞的时候坐下判断就行了

按照你的设计,我脑子里预研一下:
如果跳得不够高,最高点没超过场景,肚子与场景在一条线,此时开始下降,打开刚体,【那么碰撞盒子会怎么处理】?

1、角色掉下来(复合宾尼兔的游戏风格)。

2、角色被碰撞到强行拉到场景上方(可能有一瞬间的不太维和)

3、角色被被碰撞盒子发生【左、右】【弹开】(没法接受)

待会写代码尝试看看效果

地图编辑器的gid我也在考虑,目前地图已经分了很多层了,【不知道以后还要分多少层】:

背景1层、背景2层、障碍层(墙壁)、可穿透障碍层、
npc层(会掉血的固定场景)

主业不是搞游戏的,游戏工程流还在摸索

换一个思路,走包围盒检测或者射线检测,检测下面的碰撞体,
每个碰撞体上的node挂脚本获取枚举类型。
比如 walkdownable/ climbable/ swimmable
我们再做一个基于FSM/Behavior Tree 的 State, 比如 “walk_down”, “walk_up”,“swim”
当满足state ===walk_down , 下方的射线/ 碰撞体检测的collider 是walkdownable,可以把碰撞体的分组设置成idled_wall,比如角色头顶还有个射线区检测idle,当idle的距离>0 时候,我们把idled_wall 再改成wall, 其他思路都类似
box2D的可定制性比较差,需要自己判断colider的位置,我们也可以用collider 的位置和刚体的位置得到方向向量,用方向向量去判定 collider 在头上,前面,还是下方

用状态机很容易实现

看到这几张图片就想起以前玩的fc游戏,很怀恋呀!尝试用ceator2.4.9版本玩了一下,不知道是不是这种效果

潜水的大牛也出来了。真棒

用自带的物理引擎做的,附上参考demo,PhysicsTest.rar (705.7 KB) ,ad左右移动,空格或者k建跳跃,s+跳跃可以穿越平台下落,希望能帮到你

3赞

碰撞回调参数里面可以跳过这次碰撞,直接判断两个碰撞体坐标就行了

是滴,是滴,是滴