using Godot; /// <summary> /// 高速子弹 /// </summary> public class HighSpeedBullet : Bullet { [Export] public PackedScene Hit; //射线检测节点 private RayCast2D RayCast2D; //最大飞行距离 private float Distance; private Line2D Line; private float ca = 1; public void InitData(float distance, Color color) { RayCast2D = GetNode<RayCast2D>("RayCast2D"); Line = GetNode<Line2D>("Line"); Distance = distance; Modulate = color; Vector2 targetPos = new Vector2(distance, 0); // RayCast2D.CastTo = targetPos; RayCast2D.ForceRaycastUpdate(); if (RayCast2D.IsColliding()) { //碰到物体 Vector2 collPosition = RayCast2D.GetCollisionPoint(); Node2D hit = Hit.Instance<Node2D>(); hit.RotationDegrees = MathUtils.RandRangeInt(0, 360); hit.GlobalPosition = collPosition; GetTree().CurrentScene.AddChild(hit); //划线的点坐标 Line.SetPointPosition(1, new Vector2(Line.GlobalPosition.DistanceTo(collPosition), 0)); } else { //划线的点坐标 Line.SetPointPosition(1, targetPos); } RayCast2D.Enabled = false; } public override void _Process(float delta) { ca -= 12 * delta; if (ca <= 0) { QueueFree(); return; } Color c = Modulate; c.a = ca; Modulate = c; } }