瀏覽代碼

Add launcher with single shoot

DricomDragon 3 年之前
父節點
當前提交
a0158a27f9
共有 2 個文件被更改,包括 36 次插入1 次删除
  1. 9 1
      godot/scenes/main.tscn
  2. 27 0
      godot/scripts/Launcher.gd

+ 9 - 1
godot/scenes/main.tscn

@@ -1,8 +1,9 @@
-[gd_scene load_steps=10 format=2]
+[gd_scene load_steps=11 format=2]
 
 [ext_resource path="res://scenes/Ball.tscn" type="PackedScene" id=1]
 [ext_resource path="res://image/brik.png" type="Texture" id=2]
 [ext_resource path="res://scripts/Catcher.gd" type="Script" id=3]
+[ext_resource path="res://scripts/Launcher.gd" type="Script" id=4]
 
 [sub_resource type="PhysicsMaterial" id=5]
 friction = 0.0
@@ -81,4 +82,11 @@ script = ExtResource( 3 )
 
 [node name="Area" type="CollisionShape2D" parent="Catcher"]
 shape = SubResource( 8 )
+
+[node name="Launcher" type="Node2D" parent="."]
+position = Vector2( 200, 400 )
+script = ExtResource( 4 )
+
+[node name="Target" type="Position2D" parent="Launcher"]
+position = Vector2( 0, -200 )
 [connection signal="body_entered" from="Catcher" to="Catcher" method="_on_Catcher_body_entered"]

+ 27 - 0
godot/scripts/Launcher.gd

@@ -0,0 +1,27 @@
+extends Node2D
+
+enum State {
+	READY,
+	FIRING,
+	WAITING,
+}
+
+const BULLET_SPEED = 200.0
+
+var _ballScene = preload("res://scenes/Ball.tscn")
+
+onready var target = $Target
+
+onready var current_state = State.WAITING
+
+func _input(event):
+	if event is InputEventMouseButton and event.is_pressed() :
+		current_state = State.FIRING
+		target.position = event.position
+		shoot()
+
+func shoot():
+		var bullet = _ballScene.instance()
+		bullet.linear_velocity = (target.position - position).normalized()
+		bullet.linear_velocity *= BULLET_SPEED
+		add_child(bullet)