var scoreplayer = -2
var scoreoponente = -2
En las variables score_player y oponente les asigne un -2, no es la mejor solución pero cumple con su objetivo.
Introducción
Bienvenida a Godot Engine
¿Qué es Godot?
Conoce los lenguajes que soporta Godot
Aprende qué son los nodos, escenas, árboles y señales
Cómo inicié en Godot
Tu primer juego
¿Qué juego vas a desarrollar?
Definiendo los límites del escenario
Creando tu personaje
Programando el movimiento y sus controles
Dando vida a la pelota
Cómo lidio con la frustración al programar
Desarrollando el juego
Desarrollando la IA de tu oponente
Conectando todos los nodos
Creando el marcador
Realiza los últimos ajustes y exporta tu juego
Conclusión
¿Por dónde seguir tu ruta de Godot?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Contar con un marcador es esencial para que un juego de Pong sea emocionante y competitivo, como lo era el Pong original lanzado por Atari hace cinco décadas. En esta guía, te enseñaremos a implementar un marcador en tu juego utilizando nodos de interfaz de usuario y scripts en Godot. ¡Comencemos!
Para añadir un marcador a nuestro juego, primero debemos agregar un nodo de tipo interfaz de usuario. Esto se realiza mediante los siguientes pasos:
Agregar un nodo "Label": Este nodo nos permitirá incorporar texto en pantalla.
var marcador_player = Label.new()
Configurar propiedades del marcador:
Personalizar la apariencia:
Con el marcador visualmente preparado, necesitamos actualizarlo con los goles anotados en el juego. Utilizaremos scripts para gestionar y mostrar correctamente el puntaje:
Declarar una variable para el puntaje:
var player_score = 0
Actualizar el puntaje:
func update_score():
player_score += 1
Mostrar el puntaje en pantalla:
Process
de Godot para actualizar el texto en cada frame. Convierte el valor numérico a una cadena de texto para mostrarlo.func _process(delta):
$label.text = str(player_score)
Un problema común es que el marcador puede iniciar con valores incorrectos debido a colisiones no deseadas. Aprendamos a corregirlo:
Evitar colisiones falsas: Asegúrate de que solo se cuenten los goles cuando el objeto que colisiona sea la pelota.
if body is Ball:
update_score()
Definir el nodo de la pelota:
class_name
para identificar claramente el nodo de la pelota.class_name Ball
Replicar la lógica del marcador del jugador para el oponente es esencial para mantener el puntaje de ambos participantes. A continuación, se muestra cómo hacerlo:
Duplicar el nodo "Label" del jugador:
merging
para mostrar el marcador en la posición opuesta.var marcador_oponente = Label.new()
Crear una variable y script para el puntaje del oponente:
var oponente_score = 0
Al seguir estos pasos y poner en práctica lo que hemos aprendido, habrás mejorado significativamente tu juego de Pong añadiendo marcadores funcionales. Este conocimiento te sobrecogerá con el poder de crear experiencias de juego más completas y envolventes. ¡Sigue explorando, aprendiendo y divirtiéndote con la programación de videojuegos!
Aportes 18
Preguntas 1
var scoreplayer = -2
var scoreoponente = -2
En las variables score_player y oponente les asigne un -2, no es la mejor solución pero cumple con su objetivo.
Tipografia PoetsenOne
Adicione la siguiente linea para concatenar texto al contador.
$MarcadorPlayer.text = "Player: " + str(PlayerScore)
$OponentePlayer.text = "Oponente: " + str(OponenteScore)
Reto solucionado. Lo que hice fue duplicar el MarcadorPlayer y cambiarlo por MarcadorOpente, luego seguí los mismos pasos que para el MarcadorPlayer pero utilizando el MarcadorOponente.
**Reto Cumplido **
Lo que hice fue Duplicar el Label que ya estaba creado y cree otra variable para tomar los goles del oponente.
Aquí esta mi solución siguiendo lo hecho por el profesor.
extends Node2D
var PlayerScore = 0
var OponenteScore = 0
func _process(delta):
$Player2.text = str(PlayerScore)
$Oponente2.text = str(OponenteScore)
func _restart_game():
$Ball.is_moving = false
$Ball.direction =Vector2.ZERO
$Ball.position = Vector2(960, 540)
$Ball.reset_ball()
func _on_ArcoPlayer_body_entered(body):
OponenteScore += 1
_restart_game()
func _on_ArcoOponente_body_entered(body):
PlayerScore += 1
_restart_game()
El reto resuelto. Por cierto, no sé el bug de que inicia el contador en 2, así que lo solucioné colocando el marcador -2. Sé que no es lo mejor, peri bueno, sirve.
Para resolver el Reto
Duplicar MarcadorPlayer y en este nuevo nodo, cambiar la posicion, el texto. Agregar otra variable para acumular el score del rival y agregar en el _process la logica para modificar el texto del marcador (nodo duplicado)
El problema del 2 como valor inicial lo resolvi moviendo los arcos 1 pixel fuera del marco
La solución que realice para lo del marcador que inicia en dos, fue cambiar la posición de las “Canchas” tanto del player como del contrincante, la del player la posicione un pixel antes, y la del contrincante un pixel despues
marcador hecho 😃 (ya tiene marcadores con numeros porque estaba jugando)
Solución al reto, no supe como dejar los contadores a cero entonces inicie su valor a -2 (gracias Jonatan Martin)
Esta es mi solucion del reto, para el que no sepa se suman dos al marcador por que la pared superior e inferiror colisionan con el collider y se suman a los marcadores como puntos, entonces de poner ese condicional solo reacciona si al collider entra la pelota
Para resolver el problema del goles extra cuando arranca el partido, use las capas de colisiones, puse a los arcos en 2 y la pelota en el mismo lugar.
El problema de mi código es que por algún motivo asigna el puntaje al reves XD, en fin, simplemente cambie los labels de posición pero no es buena idea askdljasldkjasldk
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?