diff --git a/DungeonShooting_Godot/prefab/test/TestActivity.tscn b/DungeonShooting_Godot/prefab/test/TestActivity.tscn
index 475c7ad..4f7ee6c 100644
--- a/DungeonShooting_Godot/prefab/test/TestActivity.tscn
+++ b/DungeonShooting_Godot/prefab/test/TestActivity.tscn
@@ -1,24 +1,22 @@
-[gd_scene load_steps=7 format=3]
+[gd_scene load_steps=7 format=3 uid="uid://bjf0e6nehg51j"]
 
 [ext_resource type="Shader" path="res://resource/materlal/Blend.gdshader" id="1"]
 [ext_resource type="Script" path="res://src/framework/activity/ActivityObjectTemplate.cs" id="2"]
 [ext_resource type="Texture2D" uid="uid://uhhfgdhpk7i4" path="res://icon.png" id="3"]
 
-
-
 [sub_resource type="ShaderMaterial" id="ShaderMaterial_rxkv3"]
 resource_local_to_scene = true
 shader = ExtResource("1")
 shader_parameter/blend = Color(0, 0, 0, 0.470588)
 shader_parameter/schedule = 1
 
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_s2ghg"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_aaga8"]
 resource_local_to_scene = true
 shader = ExtResource("1")
 shader_parameter/blend = Color(1, 1, 1, 1)
 shader_parameter/schedule = 0
 
-[sub_resource type="SpriteFrames" id="SpriteFrames_4au77"]
+[sub_resource type="SpriteFrames" id="SpriteFrames_kkdcb"]
 animations = [{
 "frames": [{
 "duration": 1.0,
@@ -36,10 +34,8 @@
 z_index = -5
 material = SubResource("ShaderMaterial_rxkv3")
 
-[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
-material = SubResource("ShaderMaterial_s2ghg")
-sprite_frames = SubResource("SpriteFrames_4au77")
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_aaga8")
+sprite_frames = SubResource("SpriteFrames_kkdcb")
 
 [node name="Collision" type="CollisionShape2D" parent="."]
-
-[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
index 9e54ad1..a70d5cf 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
@@ -81,16 +81,36 @@
             }
         }
     }
-    
+
     /// <summary>
     /// 当前物体的海拔高度, 如果大于0, 则会做自由落体运动, 也就是执行投抛代码
     /// </summary>
-    public float Altitude { get; set; }
+    public float Altitude
+    {
+        get => _altitude;
+        set
+        {
+            _altitude = value;
+            _hasResilienceVerticalSpeed = false;
+        }
+    }
+
+    private float _altitude = 0;
 
     /// <summary>
     /// 物体纵轴移动速度, 如果设置大于0, 就可以营造向上投抛物体的效果, 该值会随着重力加速度衰减
     /// </summary>
-    public float VerticalSpeed { get; set; }
+    public float VerticalSpeed
+    {
+        get => _verticalSpeed;
+        set
+        {
+            _verticalSpeed = value;
+            _hasResilienceVerticalSpeed = false;
+        }
+    }
+
+    private float _verticalSpeed;
     
     /// <summary>
     /// 物体投抛时旋转速度, 角度制
@@ -117,6 +137,11 @@
     /// </summary>
     public Vector2 ThrowCollisionSize { get; set; } = new Vector2(-1, -1);
 
+    /// <summary>
+    /// 是否启用垂直方向上的运动模拟, 默认开启, 如果禁用, 那么下落和投抛效果, 同样 Throw() 函数也将失效
+    /// </summary>
+    public bool EnableVerticalMotion { get; set; } = true;
+
     // --------------------------------------------------------------------------------
 
     //组件集合
@@ -649,7 +674,7 @@
                 _firstFall = true;
                 _hasResilienceVerticalSpeed = false;
                 _resilienceVerticalSpeed = 0;
-
+                
                 if (ThrowCollisionSize.X < 0 && ThrowCollisionSize.Y < 0)
                 {
                     _throwRectangleShape.Size = GetDefaultTexture().GetSize();
@@ -663,75 +688,79 @@
             }
             else
             {
-                GlobalRotationDegrees = GlobalRotationDegrees + ThrowRotationDegreesSpeed * newDelta;
-
-                var ysp = VerticalSpeed;
-
-                Altitude += VerticalSpeed * newDelta;
-                VerticalSpeed -= GameConfig.G * newDelta;
-
-                //当高度大于16时, 显示在所有物体上
-                if (Altitude >= 16)
+                if (EnableVerticalMotion) //如果启用了纵向运动, 则更新运动
                 {
-                    AnimatedSprite.ZIndex = 20;
-                }
-                else
-                {
-                    AnimatedSprite.ZIndex = 0;
-                }
-            
-                //达到最高点
-                if (ysp > 0 && ysp * VerticalSpeed < 0)
-                {
-                    OnThrowMaxHeight(Altitude);
-                }
+                    GlobalRotationDegrees = GlobalRotationDegrees + ThrowRotationDegreesSpeed * newDelta;
 
-                //落地判断
-                if (Altitude <= 0)
-                {
-                    _isFallOver = true;
-                    Altitude = 0;
+                    var ysp = VerticalSpeed;
 
-                    //第一次接触地面
-                    if (_firstFall)
+                    _altitude += VerticalSpeed * newDelta;
+                    _verticalSpeed -= GameConfig.G * newDelta;
+
+                    //当高度大于16时, 显示在所有物体上
+                    if (Altitude >= 16)
                     {
-                        _firstFall = false;
-                        OnFirstFallToGround();
+                        AnimatedSprite.ZIndex = 20;
+                    }
+                    else
+                    {
+                        AnimatedSprite.ZIndex = 0;
+                    }
+                
+                    //达到最高点
+                    if (ysp > 0 && ysp * VerticalSpeed < 0)
+                    {
+                        OnThrowMaxHeight(Altitude);
                     }
 
-                    MoveController.ScaleAllForce(BounceSpeed);
-                    //如果落地高度不够低, 再抛一次
-                    if (Bounce && (!_hasResilienceVerticalSpeed || _resilienceVerticalSpeed > 1))
+                    //落地判断
+                    if (Altitude <= 0)
                     {
-                        if (!_hasResilienceVerticalSpeed)
-                        {
-                            _hasResilienceVerticalSpeed = true;
-                            _resilienceVerticalSpeed = -VerticalSpeed * BounceStrength;
-                        }
-                        else
-                        {
-                            _resilienceVerticalSpeed = _resilienceVerticalSpeed * BounceStrength;
-                        }
-                        VerticalSpeed = _resilienceVerticalSpeed;
-                        ThrowRotationDegreesSpeed = ThrowRotationDegreesSpeed * BounceStrength;
-                        _isFallOver = false;
+                        _altitude = 0;
 
-                        OnFallToGround();
-                    }
-                    else //结束
-                    {
-                        VerticalSpeed = 0;
-
-                        if (_throwForce != null)
+                        //第一次接触地面
+                        if (_firstFall)
                         {
-                            MoveController.RemoveForce(_throwForce);
-                            _throwForce = null;
+                            _firstFall = false;
+                            OnFirstFallToGround();
                         }
-                        
-                        OnFallToGround();
-                        ThrowOver();
+
+                        MoveController.ScaleAllForce(BounceSpeed);
+                        //如果落地高度不够低, 再抛一次
+                        if (Bounce && (!_hasResilienceVerticalSpeed || _resilienceVerticalSpeed > 1))
+                        {
+                            if (!_hasResilienceVerticalSpeed)
+                            {
+                                _hasResilienceVerticalSpeed = true;
+                                _resilienceVerticalSpeed = -VerticalSpeed * BounceStrength;
+                            }
+                            else
+                            {
+                                _resilienceVerticalSpeed = _resilienceVerticalSpeed * BounceStrength;
+                            }
+                            _verticalSpeed = _resilienceVerticalSpeed;
+                            ThrowRotationDegreesSpeed = ThrowRotationDegreesSpeed * BounceStrength;
+                            _isFallOver = false;
+
+                            OnFallToGround();
+                        }
+                        else //结束
+                        {
+                            _verticalSpeed = 0;
+
+                            if (_throwForce != null)
+                            {
+                                MoveController.RemoveForce(_throwForce);
+                                _throwForce = null;
+                            }
+                            _isFallOver = true;
+                            
+                            OnFallToGround();
+                            ThrowOver();
+                        }
                     }
                 }
+
                 //计算精灵位置
                 CalcThrowAnimatedPosition();
             }
@@ -1009,7 +1038,11 @@
         CalcThrowAnimatedPosition();
         //显示阴影
         ShowShadowSprite();
-        OnThrowStart();
+
+        if (EnableVerticalMotion)
+        {
+            OnThrowStart();
+        }
     }
 
     /// <summary>
diff --git a/DungeonShooting_Godot/src/game/room/RoomManager.cs b/DungeonShooting_Godot/src/game/room/RoomManager.cs
index 5e26ca9..f3afe6a 100644
--- a/DungeonShooting_Godot/src/game/room/RoomManager.cs
+++ b/DungeonShooting_Godot/src/game/room/RoomManager.cs
@@ -91,9 +91,12 @@
         Player.Position = new Vector2(30, 30);
         Player.Name = "Player";
         Player.PutDown(RoomLayerEnum.YSortLayer);
-        
         Player.PickUpWeapon(ActivityObject.Create<Weapon>(ActivityIdPrefix.Weapon + "0001"));
 
+        // var weapon = ActivityObject.Create(ActivityIdPrefix.Test + "0001");
+        // weapon.PutDown(new  Vector2(200, 200), RoomLayerEnum.NormalLayer);
+        // //weapon.Altitude = 50;
+
         // for (int i = 0; i < 10; i++)
         // {
         //     var enemy = ActivityObject.Create<Enemy>(ActivityIdPrefix.Enemy + "0001");
diff --git a/DungeonShooting_Godot/src/test/TestActivity.cs b/DungeonShooting_Godot/src/test/TestActivity.cs
index 21445ed..ef47a9e 100644
--- a/DungeonShooting_Godot/src/test/TestActivity.cs
+++ b/DungeonShooting_Godot/src/test/TestActivity.cs
@@ -1,11 +1,48 @@
 using Godot;
 
-[RegisterActivity(ActivityIdPrefix.Test + "1", ResourcePath.prefab_test_TestActivity_tscn)]
+[RegisterActivity(ActivityIdPrefix.Test + "0001", ResourcePath.prefab_test_TestActivity_tscn)]
 public partial class TestActivity : ActivityObject
 {
 	public override void OnInit()
 	{
-		var externalForce = MoveController.AddConstantForce("move");
-		externalForce.Velocity = new Vector2(0, 60);
+		EnableVerticalMotion = false;
+	}
+
+	protected override void Process(float delta)
+	{
+		if (Input.IsActionJustPressed("fire"))
+		{
+			Altitude = 100;
+		}
+
+		if (Input.IsActionJustPressed("interactive"))
+		{
+			EnableVerticalMotion = !EnableVerticalMotion;
+		}
+	}
+
+	protected override void OnFallToGround()
+	{
+		GD.Print("OnFallToGround");
+	}
+
+	protected override void OnFirstFallToGround()
+	{
+		GD.Print("OnFirstFallToGround");
+	}
+
+	protected override void OnThrowStart()
+	{
+		GD.Print("OnThrowStart");
+	}
+
+	protected override void OnThrowMaxHeight(float height)
+	{
+		GD.Print("OnThrowMaxHeight: " + height);
+	}
+
+	protected override void OnThrowOver()
+	{
+		GD.Print("OnThrowOver");
 	}
 }
\ No newline at end of file