using System; using Godot; /// <summary> /// 模拟抛出的物体, 使用时将对象挂载到该节点上即可 /// </summary> public class ThrowNode : Node2D { public float MaxHeight = 30; public float TargetHeight = 0; public float StartHeight = 0; public Vector2 StartPos; public Vector2 TargetPos = new Vector2(120, 100); public Vector2 RealPosition = Vector2.Zero; public override void _Ready() { StartPos = GlobalPosition; RealPosition = StartPos; } public override void _Process(float delta) { if (RealPosition.DistanceSquaredTo(TargetPos) > 1) { float v = (StartPos.DistanceTo(RealPosition)) / (StartPos.DistanceTo(TargetPos)); float progress = Mathf.Sin(v * Mathf.Pi); float y = 0; if (v <= 0.5f) { y = Mathf.Lerp(StartHeight, MaxHeight, progress); } else { y = Mathf.Lerp(TargetHeight, MaxHeight, progress); } RealPosition = RealPosition.MoveToward(TargetPos, 100 * delta); GlobalPosition = RealPosition - new Vector2(0, y); } } }