关于Flappy bird中水管与小鸟的碰撞

关于Flappy bird中水管与小鸟的碰撞

前言

在开发游戏的老王的文章5.1无尽水管滚滚来link中出现了三个碰撞体,浅谈一下我对三个碰撞体的看法。


提示:以下是本篇文章正文内容,下面案例可供参考

一、碰撞节点

在此只简单阐述RigidBody2D节点、Area2D节点和StaticBody2D节点。

关于RigidBody2D节点,该节点不由制作者自己支配,由物理引擎操控,可以向它施加外力来改变速度。例如在FlappyBird中,我们可以改变RigidBody2D节点中的Gravity Scale值从而达到让小鸟落下的更快的目的。

关于Area2D节点,该节点没有“形体”,可以理解为物体可以穿过它,就想一团气体一样,物体与他发生了碰撞但可以穿过它。例如FlappyBird中,小鸟每穿过一根水管就会得一分,实现得分方式就可以使用Area2D节点,RigidBody2D节点与它发生碰撞,系统会记录并给出反馈。

看雨StaticBody2D节点,该节点可以用作大型的墙面。例如FlappyBird中水管,以及地面,天花板都是用这个节点。

二、关于节点中心点

通俗来说可以理解为RigidBody2D节点(同理可以是Area2D节点,StaticBody2D节点)是整个物体的核心,Sprite是物体的灵魂,而CollisionShape是物体的身体,当核心灵魂身体三者重合,也就是RigidBody2D节点、Sprite节点以及CollisionShape节点重合时,才是一个完整物体。

让鼠标悬浮在节点可以看出该节点是什么节点。
请添加图片描述
着重说一下几个节点的中心点的问题。
请添加图片描述
注:最上方的pipe是一个Node2D节点
StaticBody2D up节点、StaticBody2D节点和Area2D scorearea节点是pipe(也就是Node2D节点)的子节点,那么移动Node2D节点的中心,它的所有子节点包括子节点的子节点都会跟着移动。
所以在我们做这种有很多子节点的工程时,应该最先调好最大的节点也就是父节点,然后一层一层的去调整剩下子节点的位置(可以利用Transform菜单里position中x,y的值进行细致的调节)。
这时候又有一个小技巧:父节点的中心,是它的子节点的原点以此建立平面直角坐标系。那么想要让CollisionShape2D节点和Sprite up节点的中心与StaticBody2D up 节点的中心重合,就可以改动position中x、y的值都为0,这样三个节点的中心就重合在一起了。
请添加图片描述

三、制作小鸟穿过水管的逻辑

现在我们的小鸟可以很自然的上下飞动,那怎么才能让它飞过水管呢?

首先我们要制作一个上下都有的水管,小鸟穿不过去水管而是会和水管发生碰撞,所以我们选择StaticBody2D节点来制作水管。

第二,小鸟成功飞过水管会得分,那么飞过水管这一动作需要得到反馈,我们可以使用没有“形体”的Area2D节点来当作反馈的装置。

第三,小鸟可能会飞的过高或者过低掉下去,这时候我们就要往天空和地面加上碰撞体让小鸟不会飞出显示区,这个碰撞节点就可以选择可以用作大型墙面的StaticBody2D节点。

还有后面无限的水管会用到timer节点,在此不多做阐述。
注:这些步骤会需要代码来进行功能的完善,代码部分可以参考最上方的链接)

以上都是自己的理解,如有错误还请大家指出。
感谢阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值