Menu
CoddyTech

Dispara balas

Parte de la sección Proyectos del Journey de Godot de Coddy. Lección 14 de 36.

E o Enter (la tecla action) dispara una bala. Una bala es una escena, bullet.tscn. Su propio script la hace volar hacia delante y la elimina después de 0.8 segundos. La nave crea una en su morro, la orienta en la misma dirección y la añade al juego:

if Input.is_action_just_pressed("action"):
	var bullet = BULLET.instantiate()
	bullet.position = position + Vector2.UP.rotated(rotation) * 18
	bullet.rotation = rotation
	get_parent().add_child(bullet)

Añade la bala al nodo padre de la nave. Un nodo hijo se mueve y gira junto con su nodo padre, así que una bala en la nave giraría con ella.

is_action_just_pressed solo es verdadero en el fotograma en que se pulsa la tecla. Cada pulsación dispara una bala.

challenge icon

Desafío

Intermedio

Dispara una bala con E.

  1. Añade const BULLET = preload("res://bullet.tscn").
  2. Cuando se acaba de pulsar action, crea una bala a 18 píxeles por delante de la nave, con la rotation de la nave.
  3. Añádela al nodo padre de la nave con get_parent().add_child(bullet).

Pulsa «Jugar» y pulsa E: una bala sale disparada desde la punta. Después, pulsa «Comprobar».

Pruébalo tú mismo

extends CharacterBody2D

const TURN_SPEED = 4.0
const THRUST = 300

func _physics_process(delta):
	rotation += Input.get_axis("move_left", "move_right") * TURN_SPEED * delta
	if Input.is_action_pressed("move_up"):
		velocity += Vector2.UP.rotated(rotation) * THRUST * delta
	$Flame.visible = Input.is_action_pressed("move_up")
	position += velocity * delta
	if position.x < 0:
		position.x += 640
	if position.x > 640:
		position.x -= 640
	if position.y < 0:
		position.y += 360
	if position.y > 360:
		position.y -= 360

Todas las lecciones de Proyectos

Practica por tu cuenta: Playground de Godot