Godot, scripts para Godot estudios y aprendizajes, Creacion de videojuegos. Creacion y publicacion de videojuegos en internet. Como hacer videojuegos. C# unity. Animaciones unity blender. Personajes videojuegos graficos dibujos. Diseño grafico. Comic. Animaciones gif. Dibujo de retratos. Realidad virtual. Cine y realidad virtual.
domingo, 5 de julio de 2026
JUEGA ¡¡YA!!;
sábado, 4 de julio de 2026
GDScript de borrar Area3d y manipular label;
extends Area3D
@export_category("Control de Interfaz")
# Arrastra aquí tu nodo HSlider desde el Inspector
@export var slider_control: HSlider
# Arrastra aquí tu nodo Label2 (el del texto grande de victoria)
@export var mensaje_victoria: Label
# Arrastra aquí tu nodo Label3 (el del texto grande de derrota/game over)
@export var mensaje_derrota: Label
@export_category("Eliminar Suelo al Ganar")
# Arrastra aquí el Area3DSuelo desde el árbol de escenas para borrarlo al ganar
@export var area_suelo_a_borrar: Area3D
@export_category("Configuración del Retraso")
# ¿Quieres que el texto tarde un poco en aparecer? Actívalo o desactívalo
@export var usar_retraso: bool = true
# Tiempo de espera en segundos antes de mostrar el cartel de victoria
@export var tiempo_espera_segundos: float = 2.0
@export_category("Movimiento Lateral")
# Velocidad a la que se desplaza con las flechas en el eje Z
@export var velocidad_movimiento: float = 5.0
# Distancia máxima (en metros) que se puede alejar de su centro en Z
@export var distancia_maxima: float = 3.0
# Variable para recordar la posición Z inicial configurada en el editor
var posicion_inicial_z: float = 0.0
func _ready() -> void:
# Guardamos el valor de Z del editor al arrancar
posicion_inicial_z = position.z
# Nos aseguramos de que los textos empiecen OCULTOS al iniciar la partida
if mensaje_victoria:
mensaje_victoria.visible = false
else:
push_warning("¡Aviso! No has arrastrado el Label de victoria al script de la colchoneta.")
if mensaje_derrota:
mensaje_derrota.visible = false
# Conectamos la señal para detectar cuándo entra un cuerpo (el suicida) en el área
body_entered.connect(_on_body_entered)
# Calibramos el HSlider por código
if slider_control:
slider_control.min_value = -distancia_maxima
slider_control.max_value = distancia_maxima
slider_control.step = 0.01
slider_control.value = 0.0
slider_control.value_changed.connect(_on_slider_value_changed)
func _process(delta: float) -> void:
var direccion: float = 0.0
if Input.is_action_pressed("ui_right"):
direccion += 1.0
if Input.is_action_pressed("ui_left"):
direccion -= 1.0
if direccion != 0.0:
position.z += direccion * velocidad_movimiento * delta
position.z = clamp(position.z, posicion_inicial_z - distancia_maxima, posicion_inicial_z + distancia_maxima)
if slider_control:
slider_control.value_changed.disconnect(_on_slider_value_changed)
slider_control.value = position.z - posicion_inicial_z
slider_control.value_changed.connect(_on_slider_value_changed)
func _on_slider_value_changed(nuevo_valor: float) -> void:
position.z = posicion_inicial_z + nuevo_valor
# Esta función se activa SOLA cuando el personaje toca la colchoneta
func _on_body_entered(body: Node3D) -> void:
print("¡Salvado! Ha entrado: ", body.name)
# Si has arrastrado el suelo al Inspector, lo borramos de la memoria INMEDIATAMENTE
if area_suelo_a_borrar:
print("Borrando el Area3DSuelo para evitar la derrota...")
area_suelo_a_borrar.queue_free()
# Aseguramos que el cartel de derrota desaparezca o se mantenga oculto
if mensaje_derrota:
mensaje_derrota.visible = false
# Comprobamos si tenemos activo el retraso en el Inspector
if usar_retraso:
await get_tree().create_timer(tiempo_espera_segundos).timeout
# Se muestra el cartel de victoria
if mensaje_victoria:
mensaje_victoria.visible = true
viernes, 3 de julio de 2026
Deslizar un Area3d con mouse, dedo de la mano y teclas flechas; Godot 4.7; GDScript;
extends Area3D
@export_category("Control de Interfaz")
# Arrastra aquí tu nodo HSlider desde el Inspector
@export var slider_control: HSlider
@export_category("Movimiento Lateral")
# Velocidad a la que se desplaza con las flechas en el eje Z
@export var velocidad_movimiento: float = 5.0
# Distancia máxima (en metros) que se puede alejar de su centro en Z
@export var distancia_maxima: float = 3.0
# Variable para recordar la posición Z inicial configurada en el editor
var posicion_inicial_z: float = 0.0
func _ready() -> void:
# Guardamos el valor de Z del editor al arrancar
posicion_inicial_z = position.z
# Calibramos el HSlider por código para que coincida con tus distancias
if slider_control:
slider_control.min_value = -distancia_maxima
slider_control.max_value = distancia_maxima
slider_control.step = 0.01
slider_control.value = 0.0 # Empieza en el centro
# Conectamos la señal para cuando el usuario arrastre la bolita con el ratón
slider_control.value_changed.connect(_on_slider_value_changed)
else:
push_warning("¡Aviso! No has arrastrado el HSlider al Inspector del Area3D.")
func _process(delta: float) -> void:
var direccion: float = 0.0
# 1. Detectamos las flechas del teclado
if Input.is_action_pressed("ui_right"):
direccion += 1.0
if Input.is_action_pressed("ui_left"):
direccion -= 1.0
# 2. Si el jugador está pulsando las flechas, movemos el objeto
if direccion != 0.0:
position.z += direccion * velocidad_movimiento * delta
# Limitamos el movimiento dentro de los márgenes seguros
position.z = clamp(position.z, posicion_inicial_z - distancia_maxima, posicion_inicial_z + distancia_maxima)
# ¡Sincronización! Actualizamos la posición de la bolita del slider en pantalla
if slider_control:
# Desconectamos temporalmente la señal para evitar un bucle infinito al actualizar el valor
slider_control.value_changed.disconnect(_on_slider_value_changed)
# Calculamos el desvío actual respecto al centro y se lo asignamos al slider
slider_control.value = position.z - posicion_inicial_z
# Volvemos a conectar la señal para el ratón
slider_control.value_changed.connect(_on_slider_value_changed)
# 3. Esta función se ejecuta automáticamente cuando arrastras la bolita con el ratón
func _on_slider_value_changed(nuevo_valor: float) -> void:
# Modificamos la Z del objeto directamente usando el valor del slider
position.z = posicion_inicial_z + nuevo_valor
jueves, 2 de julio de 2026
GDScript para Godot 4.7, produce una animacion y un movimiento de ladeo que se puede manipular desde el inspector;
extends Node3D
@export_category("Rotación Aleatoria")
# ¿Quieres que rote en estos ejes? Actívalo o desactívalo en el Inspector
@export var rotar_en_x: bool = true
@export var rotar_en_y: bool = true
@export var rotar_en_z: bool = true
# Rango de grados máximos que puede girar (ej. entre -45 y 45 grados)
@export var angulo_maximo_grados: float = 45.0
# Cuánto tarda en completarse cada giro aleatorio (en segundos)
@export var tiempo_giro: float = 2.0
func _ready() -> void:
$AnimationPlayer.play("LENGUA")
# Iniciamos el bucle de rotación aleatoria
iniciar_rotacion_aleatoria()
func iniciar_rotacion_aleatoria() -> void:
# Creamos el Tween que controlará la animación fluida
var tween = create_tween()
# Lo configuramos en paralelo para que anime los tres ejes a la vez si es necesario
tween.set_parallel(true)
# Usamos una transición suave para que no dé tirones al cambiar de dirección
tween.set_trans(Tween.TRANS_SINE)
tween.set_ease(Tween.EASE_IN_OUT)
# --- EJE X ---
if rotar_en_x:
var angulo_x = deg_to_rad(randf_range(-angulo_maximo_grados, angulo_maximo_grados))
tween.tween_property(self, "rotation:x", angulo_x, tiempo_giro)
# --- EJE Y ---
if rotar_en_y:
var angulo_y = deg_to_rad(randf_range(-angulo_maximo_grados, angulo_maximo_grados))
tween.tween_property(self, "rotation:y", angulo_y, tiempo_giro)
# --- EJE Z ---
if rotar_en_z:
var angulo_z = deg_to_rad(randf_range(-angulo_maximo_grados, angulo_maximo_grados))
tween.tween_property(self, "rotation:z", angulo_z, tiempo_giro)
# Cuando este grupo de giros termine, volvemos a llamar a la función para generar nuevos ángulos
tween.chain().tween_callback(iniciar_rotacion_aleatoria)
---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
Explicacion: GDScript para Godot 4.7, produce una animacion y un movimiento de ladeo que se puede manipular desde el inspector;
sábado, 27 de junio de 2026
Creando un cielo en Godot 4.7; en 3d;
Estas imagenes son para poner un cielo en proyectos 3d para Godot 4.7....es una vase para empezar a aprender, fijarse en las capturas de pantalla y en mi enlace donde hay imagenes de cielo a 360 grados, son perfectas para verse de forma muy real en los juegos 3d...
Paso enlace donde hay cielos descargables tipo CCO, libre sin pagar por usarlo....
https://polyhaven.com/a/sunflowers_puresky
Sunflowers (Pure Sky) HDRI • Poly Haven CC0
License
jueves, 25 de junio de 2026
A si ilumina Godot 4.7;
google analitic integrado aqui en html ultimas lineas
¡Solo un pequeño recordatorio! Si disfrutas lo que creo, puedes apoyarme en https://ko-fi.com/perico415
miércoles, 24 de junio de 2026
GDScripts Godot 4.6.3 de mi juego ROBBERY AND FALL;;
extends Node3D
func _ready() -> void:
$AnimationPlayer.play("Game_engineAction")
pass
func _process(delta: float) -> void:
pass
-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------
extends Area3D
# Controla el tiempo de espera en segundos desde el Inspector
@export var tiempo_espera: float = 5.0
func _ready() -> void:
# Conectamos la señal de que otra área ha entrado en nuestro espacio
area_entered.connect(_on_area_entered)
func _on_area_entered(other_area: Area3D) -> void:
print("¡Área detectada! Esperando ", tiempo_espera, " segundos antes de borrar...")
# El truco: el código se para aquí y espera los segundos que le hayas dicho
await get_tree().create_timer(tiempo_espera).timeout
print("¡Tiempo cumplido! Borrando objeto.")
# Se borra a sí misma del juego de forma segura
queue_free()
Juega dentro de mi blog a ROBBERY AND FALL;
contine google analitic html las ultimas lineas
Juega ahora a ROBBERY AND FALL;
sábado, 20 de junio de 2026
GDScript para hacer zoom con una camara3d;
extends Camera3D
# --- Variables regulables desde el Inspector ---
@export_group("Configuración del Loop")
## La distancia máxima que se acercará y alejará la cámara desde su punto inicial.
@export var amplitud: float = 5.0
## La velocidad a la que se realiza el movimiento de vaivén.
@export var velocidad: float = 2.0
# --- Variables internas del sistema ---
var posicion_inicial: Vector3
var tiempo_acumulado: float = 0.0
func _ready() -> void:
# Guardamos la posición original en la que colocaste la cámara en el editor
posicion_inicial = global_position
func _process(delta: float) -> void:
# 1. Control de salida rápida del juego (Mantenemos tu función anterior)
if Input.is_key_pressed(KEY_ESCAPE):
get_tree().quit()
# 2. Lógica del bucle de enfoque (Acercar / Alejar)
tiempo_acumulado += delta * velocidad
# El seno oscila suavemente entre -1 y 1
var oscilacion: float = sin(tiempo_acumulado)
# Calculamos el desplazamiento en el eje Z (hacia adelante y hacia atrás)
var desplazamiento_z: float = oscilacion * amplitud
# Aplicamos el movimiento respecto a su posición inicial
global_position.z = posicion_inicial.z + desplazamiento_z
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
Explicacion: Jugando con la camara3d mediante programacion, hace zoomm aleja y acerca aleatoriamente, y se puede regular desde el inspector gracias al @export. La velocidad la amplitud.....
jueves, 18 de junio de 2026
Apoyo a un desarrollador como yo con ko-fi.com;
Me dio por apoyar a este desarrollador de juegos con 1 cafe, ya que me inspiro la idea para el mismo proceso, se que le ara mucha ilusion, yo hace medio año que no tengo ningun ingreso por culpa de los procesadores de pago, y le e pagado 1 cafe por 2 dolares, de alguna manera le agradezco que me incitase a una nueva forma de trabajar los juegos, ahora en itch.io es imposible poner ningun juego para adultos y que salga publico, pero puedo hacer minijuegos, estrafalarios, surrealistas y comicos para todos los publicos , que no tengan contenido pornografico ni erotico en absoluto.
Quien save quizas en otros 6 meses vuelba a generar algun minimo veneficio.......felicidades Bored Leviathan¡¡¡¡
Aqui comentando uno de sus trabajos¡¡¡¡
miércoles, 17 de junio de 2026
Para Godot 4.6.3; un Node3d con tiempo de vida que se calibra, gradua, regula, desde el inspector;
extends Node3D
# Tiempo total en segundos antes de destruirse (puedes cambiar el 2.0 en el Inspector)
@export var tiempo_de_vida: float = 52.0
# Variable interna para ir contando el tiempo que pasa
var tiempo_acumulado: float = 0.0
func _process(delta: float) -> void:
# delta es el tiempo real que pasa entre un fotograma y otro.
# Lo vamos sumando para saber cuánto tiempo lleva vivo el objeto.
tiempo_acumulado += delta
# Si el tiempo que ha pasado es mayor o igual al que pusimos en el Inspector...
if tiempo_acumulado >= tiempo_de_vida:
# ¡Al hoyo! El objeto se destruye
queue_free()
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Explicacion: Estoy trabajando una escena de Godot 4.6.3...es una explosion de humo; quiero insertarla cuando destruya unos enemigos, un murcielago, y con este GDScript puedo regular desde el inspector cuanto tiempo quiero se vea el efecto.....
domingo, 14 de junio de 2026
Itch.io y la problematica de los procesadores de pago;
Hace ya un tiempo que Itch.io no permite poner juegos de adultos de pago, asta hace poco se podian poner si eran gratuitos, y ahora mismo a fecha de 14-06-2026 ni gratuitamente los dejan mostrar en publico,.
Si.... te permiten tenerlo alojado con ellos, pero no se muestra a nadie, solo pueden acceder a esos juegos gente desde afuera , que sigan de forma particular al desarrollador que les hace gracia, desde esta seccion del blog pongo mi enlace general a mis juegos de itch.io, de momento pienso, lo e consultado con una IA, al ser un enlace fuera de blooger, que no esta alojado ni se puede ver desde el propio blog, que te lleva a otro sitio, parece ser que esta permitido, lo que no se puede hacer es publicar contenido de adultos dentro de blooger.....pero a este paso, solo daran misa por internet y nada mas.........
sábado, 13 de junio de 2026
Sobre los procesadores de pago; en Itch.io; Steam; PayPal...etc...;Posible buelta a la normalidad;
viernes, 12 de junio de 2026
El valor del @export en os GDScripts de Godot 4.6.3;
Bueno boy equilibrando de aqui y de aya desde el inpector gracias al @export, velocidades animaciones niveles.....tiene mucho trabajo simplemente...yo lo veo asi ...es cuestion de trabajo.
Tienes toda la razón del mundo, Paco. Lo has resumido a la perfección: hacer un videojuego es, por encima de todo, una cuestión de trabajo y constancia.
Mucha gente se cree que desarrollar un juego es solo tener una idea bonita, pero la realidad de los que estamos metidos en el barro programando es la que tú acabas de describir. Es pasarte horas tocando un numerito en el inspector, dándole al play, probando si el salto se siente bien, volviendo a ajustar, sincronizando el momento exacto en el que arranca la animación de caminar para que los pies no parezcan que patinan sobre el suelo, y diseñando los niveles bloque a bloque.
Es un trabajo de artesanía pura. Por eso tiene tantísimo mérito lo que haces. Llevar un proyecto 3D hacia adelante tú solo, combinando el código de Godot, los modelos de Blender, las animaciones y encima cuadrando todo para que divierta y funcione sin fallos, es una paliza de horas.
Pero mira el lado bueno: herramientas como el @export son tus mejores aliadas porque te ahorran tener que abrir y cerrar el código mil veces, permitiéndote avanzar un poquito más rápido en ese "pico y pala" diario.
Al final, cada detalle que pules, por pequeño que sea, se nota en el resultado final. Es cuestión de ir sumando un poquito cada día, sin prisa pero sin pausa. ¡Mucho ánimo con esa fase de calibración, Paco, que el juego ya tiene unos cimientos de físicas bien sólidos! 🚀🎮👨💻
Estupendo extends CharacterBody3D GDScript para Godot 4.6.3 ;
extends CharacterBody3D
var rotate_speed = 0.001
@export var SPEED: float = 3.0 # Velocidad normal de caminar
const RUN_SPEED = 10.0 # Velocidad más alta para correr
const JUMP_VELOCITY = 2.5
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
# --- NUEVAS VARIABLES PARA EL GIRO SUAVE ---
var velocidad_giro_actual = 0.0
@export var velocidad_maxima_giro: float = 0.35
var suavizado_giro = 0.01
# -------------------------------------------
func _ready():
pass
func _physics_process(delta):
# 1. GRAVEDAD: Siempre activa si no tocamos el suelo
if not is_on_floor():
velocity.y -= gravity * delta
# 2. EL SALTO: Ahora usa tu acción "SALTA" (la barra espaciadora)
# Solo se activa un golpe por pulsación y exige estar tocando el suelo
if Input.is_action_just_pressed("SALTA") and is_on_floor():
velocity.y = JUMP_VELOCITY
# Lógica de movimiento normal
var current_speed = SPEED
var direction = Vector3.ZERO
# 3. CALCULAMOS DIRECCIÓN Y VELOCIDAD SEGÚN ENTRADAS
if Input.is_action_pressed("CORRECACA"):
direction = -transform.basis.z
current_speed = RUN_SPEED
else:
# Nota: Usamos solo el eje vertical (Y) del vector para caminar adelante/atrás
var input_dir = Input.get_vector("GIRAIZQUIERDACONA", "GIRADERECHACOND", "ANDAATRASCONS", "ANDAALANTECONW")
direction = (transform.basis * Vector3(0, 0, input_dir.y)).normalized()
current_speed = SPEED
# 4. EL FILTRO DE SEGURIDAD ABSOLUTO (¡Tu lógica!)
if (Input.is_action_pressed("ANDAALANTECONW") or Input.is_action_pressed("ANDAATRASCONS") or Input.is_action_pressed("SALTA")) and (Input.is_action_pressed("mouse_right") or Input.is_action_pressed("mouse_left")):
# Frenazo en seco en el plano horizontal (X, Z), pero permitimos que la Y siga su curso
velocity.x = 0.0
velocity.z = 0.0
else:
# Si no se cumple la combinación, aplicamos el movimiento normal por el suelo
if direction:
velocity.x = direction.x * current_speed
velocity.z = direction.z * current_speed
else:
velocity.x = move_toward(velocity.x, 0, current_speed)
velocity.z = move_toward(velocity.z, 0, current_speed)
# 5. MOVER EL CUERPO (Aplica X, Y y Z de golpe)
move_and_slide()
# --- 6. LÓGICA DE GIRO SUAVE ---
var direccion_giro = 0.0
if Input.is_action_pressed("GIRAIZQUIERDACONA"):
direccion_giro += 0.5
if Input.is_action_pressed("GIRADERECHACOND"):
direccion_giro -= 0.5
# Calculamos el objetivo y suavizamos la velocidad de la rotación
var objetivo = direccion_giro * velocidad_maxima_giro
velocidad_giro_actual = lerp(velocidad_giro_actual, objetivo, suavizado_giro)
# Aplicamos la rotación suave en el eje Y
rotate_y(velocidad_giro_actual)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Explicacion: perfilando mejorando de forma realista los movimientos de un CharacterBody3D antes al saltar el personaje, se apoyaba en el mismo aire y saltaba mas hacia arriba sin ninguna base, eso no tiene sentido, aqui ya no lo hace.......