Godot 游戏引擎学习 课外学习:新场景 3

Godot 游戏引擎学习 课外学习:新场景 3

December 30, 2020
设计 ,

今天继续完成之前指定的任务,基本上算是全部完成了

image-20201230232036706

今天完成了所有机关部分,分别为顶部尖刺,上下飞轮,弹簧垫。

其实所有的机关我应该做个父类的,自己偷懒了,没有去实践父脚本这个东西。不过好在也算是全部实现了,基本上没啥问题了。

顶部尖刺

利用 Area2D 场景来做碰撞检测,因为尖刺是图块形式,而且设置在场景中后是不规则的形状,所以碰撞检测节点不在使用 CollisionShape2D 了,这里使用的 ColiisisonPolygon,这个节点可以通过点线来设置不规则的碰撞区域,用在这里刚刚好。

image-20201230232549435

上下飞轮

这里用到了之前学移动平台时候的知识,主要原理是利用了 AnimationPlayer、Path2D、Path2dFollow、RemoteTransform2D 这几个组件。RemoteTransform 记录当前 PathFollow2D 的路径,并更新给 Sprite,再利用 AnimationPlayer 来 PathFollow2D 的路径更新 Sprite 的位置,RemoteTransForm 主要是同步的作用。

刚刚做的时候都忘记之前是怎么弄的了,仔细看了下 RemoteTransForm 文档里的介绍后才算是真正弄懂了这个节点的作用。

另外做动画的移动的关键帧只需要设置到一半,运行到一半后数值达到指定数据后剩下后面半解动画会自动跟着相减知道 0 为值,这样即可达到上下来回的目的。

image-20201230232927096

弹簧垫

利用 Area2d 检测 body_entered 信号,传入玩家的 palyer 对象,更改起跳数据即可。

这里的节点结构和其他机关不一样,应为弹簧垫是有碰撞体积的,所以我在 Area2D 下增加了一个 StaticBody2D 节点,这个节点下面再增加 Sprite,animationPlayer 等节点,这样实例化到场景里面后这个弹簧垫就有了碰撞体积。不至于人物踩在上面会重叠在一起。

代码实部分

# 身体进如碰撞区域的信号,并传入碰撞该物体的节点对象
func _on_TrapSpringPad_body_entered(player):
    # 只有在角色碰撞到的情况下才触发事件
	if player.get_name() == "Player":
        # 让玩家跳跃高度为正常跳跃的1.5倍高
		player.velocity.y = -player.jump_force * 1.5
        # 并播放弹簧垫的弹动动画
		animation_player.play("bounce")
        # 设置玩家状态为跳跃状态。
		player.is_jumping = true;

image-20201230233606547

最终效果

新场景_trap

加入评论