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, 31 de agosto de 2025
Videojuego para todos los publicos de piratas;
jueves, 28 de agosto de 2025
Promocionando mi trabajo actual lo ultimo de lo ultimo, aunque no esta terminado ni mucho menos, pero me publicito con humildad;
El video es una presentación de un juego de piratas en desarrollo, creado por ti. En él, ofreces un tutorial detallado de las características del juego.
martes, 26 de agosto de 2025
instanciando un RigidBody3D con gravedad que cae a los 3 segundos; automaticamente cada 3 segundos;
extends Area3D
# Carga la escena de la bola para poder instanciarla.
var bola_proyectada_scene = preload("res://PIRATAENCUBETA/PROLLECTILES DE PIRATA EN CUBIERTA/RIGBODIQUECAEarea_3dBOLAPROYECTADA.tscn")
# Variable para contar el tiempo restante para la próxima instancia.
var tiempo_restante: float = 3.0
func _process(delta: float) -> void:
# Resta el tiempo transcurrido (delta) al contador.
tiempo_restante -= delta
# Comprueba si el tiempo ha llegado a cero o menos.
if tiempo_restante <= 0.0:
# Llama a la función para instanciar la bola.
instanciar_bola()
# Reinicia el contador para que el ciclo se repita cada 3 segundos.
tiempo_restante = 3.0
func instanciar_bola() -> void:
# Instancia la escena pre-cargada.
var nueva_bola = bola_proyectada_scene.instantiate()
# Asigna la posición de la nueva instancia a la del nodo actual.
nueva_bola.global_position = self.global_position
# Añade la instancia como hijo del nodo padre.
get_parent().add_child(nueva_bola)
viernes, 22 de agosto de 2025
Cambiar resolucion de pantalla en los juegos de godot 4.4;
extends MultiMeshInstance3D
# Definimos las tres resoluciones.
var resolucion_1: Vector2i = Vector2i(1920, 1080)
var resolucion_2: Vector2i = Vector2i(1280, 720) # He corregido el 12800 a 1280.
var resolucion_3: Vector2i = Vector2i(800, 600)
func _input(event: InputEvent) -> void:
# Si presionas RESOLUCION1, cambia a 1920x1080
if event.is_action_pressed("RESOLUCION1"):
DisplayServer.window_set_size(resolucion_1)
# Opcional: para que se vea en ventana y no en pantalla completa
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
# Si presionas RESOLUCION2, cambia a 1280x720
if event.is_action_pressed("RESOLUCION2"):
DisplayServer.window_set_size(resolucion_2)
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
# Si presionas RESOLUCION3, cambia a 800x600
if event.is_action_pressed("RESOLUCION3"):
DisplayServer.window_set_size(resolucion_3)
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
--------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
Explicacion: este GDScript cambia la resolucion de pantallas en 3 tamaños, tecla -1- con mapa de entrada llamado "RESOLUCION1" tecla-2- "RESOLUCION2" tecla -3- "RESOLUCION3" resoluciones de 1920x1080 de 1280x720 de 800x600.
miércoles, 20 de agosto de 2025
¡¡Trabajo duro!!;
Esa es una descripción muy precisa del "trabajo duro" en el desarrollo de videojuegos y en la programación. No es un cansancio físico, sino un agotamiento mental que se deriva de la concentración y la repetición.
Tienes toda la razón, es un trabajo mentalmente agotador:
Concentración Intensa: Estar horas concentrado en una pantalla, resolviendo problemas y buscando el origen de los errores, consume muchísima energía mental. Es un tipo de esfuerzo que el cerebro no está acostumbrado a sostener por períodos largos.
Tareas Repetitivas y Paciencia: Afinar pequeños detalles, hacer ajustes mínimos en los valores de un script, o simplemente probar y volver a probar algo una y otra vez requiere una paciencia y una disciplina que no todo el mundo tiene.
La Lucha contra lo invisible: Con las tareas físicas, ves el progreso: la pared se construye, la zanja se excava. En la programación, a veces trabajas durante horas y no ves un cambio visible hasta que finalmente encuentras ese pequeño error que lo arregla todo.
Ese tipo de trabajo es el que diferencia a un aficionado de un profesional. Esa constancia y esa capacidad para seguir adelante a pesar de la frustración mental es lo que al final se traduce en un producto de calidad. Es un tipo de "músculo" que se entrena con la práctica y la disciplina.
Giros locos de un pez muerto y luego se borra pasados unos segundos;
extends Node3D
# Velocidad máxima de rotación en radianes por segundo.
# Puedes ajustar este valor en el Inspector para controlar la "locura".
@export var max_rotation_speed: float = 10.0
func _process(delta: float) -> void:
# Genera un valor de rotación aleatorio para cada eje en cada fotograma
var random_x_rotation = (randf() * 2 - 1) * max_rotation_speed
var random_y_rotation = (randf() * 2 - 1) * max_rotation_speed
var random_z_rotation = (randf() * 2 - 1) * max_rotation_speed
# Rota el nodo en los tres ejes usando los valores aleatorios
# 'delta' asegura que la rotación sea suave e independiente de los FPS
rotate_x(random_x_rotation * delta)
rotate_y(random_y_rotation * delta)
rotate_z(random_z_rotation * delta)
func _ready():
# get_tree().create_timer(3.0) crea un temporizador de 3 segundos.
# .timeout.connect(queue_free) conecta la señal 'timeout' del temporizador
# con el método 'queue_free()' de este mismo nodo.
# queue_free() borra el nodo de forma segura.
get_tree().create_timer(4.8).timeout.connect(queue_free)
Instancia 4 elementos funciona en godot 4.4;
extends Area3D
var Esferauno = preload("res://BARCO ELEMENTOS TEXTURAS/CAÑONES/TIBURON REVENTAO-3-.tscn")
var Esferauno1 = preload("res://BARCO ELEMENTOS TEXTURAS/CAÑONES/TIBURON REVENTAO-3-.tscn")
var Esferauno2 = preload("res://BARCO ELEMENTOS TEXTURAS/AGUA/mesh_instance_3d_salpicadurasDEL TIBURON MUERTO.tscn")
var Esferauno3 = preload("res://BARCO ELEMENTOS TEXTURAS/TIBURON/ACUARIUM/TIBURON/TIBURONSERETUERCEMUERTO-.tscn")
func _ready() -> void:
$AnimationPlayer.play("TIBURONDESDEAREAMUEVO")
pass
func _process(delta: float) -> void:
pass
func _on_area_entered(area: Area3D) -> void:
var parent = get_parent() # Obtiene una referencia al nodo padre
if parent and parent is CharacterBody3D:
var parent_global_transform = parent.global_transform # Guarda la transformación global del padre
# Instancia la escena de "POLICIA NOKEADO"
var policia_nokeado_instancia = Esferauno.instantiate()
get_tree().root.add_child(policia_nokeado_instancia) # Añade la instancia a la raíz del árbol de escena
policia_nokeado_instancia.global_transform = parent_global_transform # Establece su posición a la del padre borrado
parent.queue_free() # Borra el nodo padre (CharacterBody3D)
var collision_shape_cubo = parent.get_node_or_null("CollisionShape3D")
if collision_shape_cubo:
collision_shape_cubo.queue_free()
get_node("CollisionShape3D").queue_free()
# Si deseas que esta Area3D también se borre, descomenta la siguiente línea
# queue_free()
pass
func _on_area_exited(area: Area3D) -> void:
# Ahora, Esferauno (POLICIA NOKEADO) ya no se instanciará aquí.
# Si Esferauno1 (DIENTES Y SANGRE) debe seguir apareciendo al salir, déjalo aquí.
var Esferauno1_instancia = Esferauno1.instantiate()
add_child(Esferauno1_instancia) # Puedes decidir si quieres que esto sea hijo de esta Area3D o de la raíz.
var Esferauno2_instancia = Esferauno2.instantiate()
add_child(Esferauno2_instancia) # Puedes decidir si quieres que esto sea hijo de esta Area3D o de la raíz.
var Esferauno3_instancia = Esferauno3.instantiate()
add_child(Esferauno3_instancia) # Puedes decidir si quieres que esto sea hijo de esta Area3D o de la raíz.
pass
Giros locos en ejes -y-z-x alternando y a lo loco; simulara un pez cazado;
extends Node3D
# Velocidad máxima de rotación en radianes por segundo.
# Puedes ajustar este valor en el Inspector para controlar la "locura".
@export var max_rotation_speed: float = 10.0
func _process(delta: float) -> void:
# Genera un valor de rotación aleatorio para cada eje en cada fotograma
var random_x_rotation = (randf() * 2 - 1) * max_rotation_speed
var random_y_rotation = (randf() * 2 - 1) * max_rotation_speed
var random_z_rotation = (randf() * 2 - 1) * max_rotation_speed
# Rota el nodo en los tres ejes usando los valores aleatorios
# 'delta' asegura que la rotación sea suave e independiente de los FPS
rotate_x(random_x_rotation * delta)
rotate_y(random_y_rotation * delta)
rotate_z(random_z_rotation * delta)
Instanciar 3 elementos para simular una caza en el mar, ademas anima un objeto en una simulacion del mar;
extends Area3D
var Esferauno = preload("res://BARCO ELEMENTOS TEXTURAS/CAÑONES/TIBURON REVENTAO-3-.tscn")
# Nota: "Esferauno1" está precargando la misma escena que "Esferauno".
# Si son escenas diferentes, por favor revisa la ruta.
var Esferauno1 = preload("res://BARCO ELEMENTOS TEXTURAS/CAÑONES/TIBURON REVENTAO-3-.tscn")
var Esferauno2 = preload("res://BARCO ELEMENTOS TEXTURAS/AGUA/mesh_instance_3d_salpicaduras.tscn")
func _ready() -> void:
$AnimationPlayer.play("TIBURONDESDEAREAMUEVO")
func _on_area_entered(area: Area3D) -> void:
var parent = get_parent()
if parent and parent is CharacterBody3D:
var parent_global_transform = parent.global_transform
# Instancia la escena del "POLICIA NOKEADO"
var policia_nokeado_instancia = Esferauno.instantiate()
get_tree().root.add_child(policia_nokeado_instancia)
policia_nokeado_instancia.global_transform = parent_global_transform
# Borra el nodo padre (CharacterBody3D)
parent.queue_free()
# Instancia y añade Esferauno1
var Esferauno1_instancia = Esferauno1.instantiate()
Esferauno1_instancia.global_transform = parent_global_transform
get_tree().root.add_child(Esferauno1_instancia)
# Instancia y añade Esferauno2 (salpicaduras)
var Esferauno2_instancia = Esferauno2.instantiate()
Esferauno2_instancia.global_transform = parent_global_transform
get_tree().root.add_child(Esferauno2_instancia)
# Borra el CollisionShape3D de este nodo
var collision_shape = get_node_or_null("CollisionShape3D")
if collision_shape:
collision_shape.queue_free()
# Borra el propio nodo Area3D para evitar errores futuros
queue_free()
domingo, 17 de agosto de 2025
Me tratan de esquizofrenico¡¡¡¡;
https://itch.io/profile/evefysh
https://perico415.itch.io/mmacabre-and-gothic/comments
¿El desarrollador está mentalmente enfermo? No lo digo como un insulto, simplemente literalmente jugando todos sus juegos y me da las vibraciones de un esquizofrénico tratando de hacer un juego
Alo cual respondi:
Vincent van Gogh, pintor holandés, también tenía problemas mentales, y mira como está valorada su obra.
AL FINAL BORRE LA CRITICA Y LA RESPUESTA, NO ME APORTA NADA, SOLO HACE PERDER EL TIEMPO, QUIERO PENSAR QUE LAS CRITICAS HAN DE SER RESPETUOSAS Y DE SUMAR NO DE RESTAR.
En este enlace una critica constructiva
sábado, 16 de agosto de 2025
Dispara en Godot 4.4 instanciando y moviendo el cañon en 4 angulos;
extends Area3D
var Bullet = preload("res://BARCO ELEMENTOS TEXTURAS/CAÑONES/area_3dprollectil_cañon.tscn")
var fire_cooldown: float = 1.7
var can_fire: bool = true
var bullet_speed: float = 20.0
var fire_timer: Timer
# Asegúrate de que esta variable exista. La agregué aquí.
var rotation_speed: float = 1.0
func _ready() -> void:
fire_timer = Timer.new()
add_child(fire_timer)
fire_timer.wait_time = fire_cooldown
fire_timer.one_shot = true
fire_timer.timeout.connect(func(): can_fire = true)
func _process(delta: float) -> void:
# Lógica de Disparo
if Input.is_action_pressed("DISPARACAÑON") and can_fire:
can_fire = false
instantiate_bullet()
fire_timer.start()
# Lógica de Rotación
var rotation_direction: float = 0.0
if Input.is_action_pressed("girav"):
rotation_direction = 1.0
elif Input.is_action_pressed("girab"):
rotation_direction = -1.0
# Aplica la rotación en el eje X.
#rotate_x(rotation_speed * rotation_direction * delta)
rotate_x(delta * rotation_speed * rotation_direction )
if Input.is_action_pressed("giraz"):
rotation_direction = 1.0
# Si se presiona la acción "girax", gira en la dirección opuesta.
elif Input.is_action_pressed("girax"):
rotation_direction = -1.0
# Aplica la rotación en el eje Y.
# Si ninguna tecla está presionada, rotation_direction será 0 y el objeto no girará.
rotate_y(rotation_speed * rotation_direction * delta)
func instantiate_bullet() -> void:
var bullet = Bullet.instantiate()
bullet.global_transform = self.global_transform
if bullet is RigidBody3D:
bullet.apply_central_impulse(-self.global_transform.basis.z * bullet_speed)
else:
print("¡Error! La escena del proyectil no es un RigidBody3D y no puede recibir un impulso.")
get_tree().root.add_child(bullet)
viernes, 15 de agosto de 2025
¡¡El pirata marchoso!!;
GDScript que produce disparo de un proyectil y que mantiene su curso independientemente de si giramos el cañon;
extends Area3D
var Bullet = preload("res://BARCO ELEMENTOS TEXTURAS/CAÑONES/area_3dprollectil_cañon.tscn")
var fire_cooldown: float = 1.7
var can_fire: bool = true
var bullet_speed: float = 20.0
var fire_timer: Timer
func _ready() -> void:
fire_timer = Timer.new()
add_child(fire_timer)
fire_timer.wait_time = fire_cooldown
fire_timer.one_shot = true
fire_timer.timeout.connect(func(): can_fire = true)
func _process(delta: float) -> void:
if Input.is_action_pressed("DISPARACAÑON") and can_fire:
can_fire = false
instantiate_bullet()
fire_timer.start()
func instantiate_bullet() -> void:
var bullet = Bullet.instantiate()
bullet.global_transform = self.global_transform
# Comprobamos que el nodo es un RigidBody3D antes de aplicar el impulso.
if bullet is RigidBody3D:
bullet.apply_central_impulse(-self.global_transform.basis.z * bullet_speed)
else:
print("¡Error! La escena del proyectil no es un RigidBody3D y no puede recibir un impulso.")
get_tree().root.add_child(bullet)
------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
Explicacion: este Area3d que produce el disparo de un proyectil es hijo de una base que gira presionando las teclas -z-x, tenia el problema que cuando giraba el cañon el proyectil disparado tambien giraba como si formase parte del mismo giro del cañon y este GDScript corrige el problema, asi cuando disparo el proyectil sigue su curso en linea recta y en la direccion hacia donde realice el disparo y no se desvia por muchos giros que aga despues de realizado el disparo.
"DISPARACAÑON" es el nombre asociado ala tecla-c- que realiza el disparo, se dice mapa de entrada y se prepara antes de realizar cualquier GDScript, y se puede aprovechar para futuros juegos, se pueden aprovechar todos los recursos anteriores de los mapas de entrada para futuros juegos sin tener que partir de cero continuamente.
GDScript para que un MeshInstance3D gire en su eje -y- presionando teclas del pc -z-x-;
extends MeshInstance3D
# Velocidad de rotación en radianes por segundo.
@export var rotation_speed: float = 1.0
func _process(delta: float) -> void:
# Por defecto, la dirección de rotación es 0 (está quieto).
var rotation_direction: float = 0.0
# Si se presiona la acción "giraz", gira en una dirección.
if Input.is_action_pressed("giraz"):
rotation_direction = 1.0
# Si se presiona la acción "girax", gira en la dirección opuesta.
elif Input.is_action_pressed("girax"):
rotation_direction = -1.0
# Aplica la rotación en el eje Y.
# Si ninguna tecla está presionada, rotation_direction será 0 y el objeto no girará.
rotate_y(rotation_speed * rotation_direction * delta)
--------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
Explicacion: en mi nuevo videojuego de piratas y bucaneros e puesto unos cañones a bordo que mediante la presion de las teclas -z-x- hacen un giro de lado a lado en su eje -y-, en Godot asigne esas teclas en su mapa de entrada con los nombres "giraz" y "girax" este gdscript cumple mi deseo a la perfeccion,.
Estudio de un desarrollador indie;
¡¡QUE LOCURA!!
jueves, 14 de agosto de 2025
Mar texturas;
lunes, 11 de agosto de 2025
¡¡El pirata loco!!;
Sobre la censura en Itch.io por los procesadores de pago;
Sobre la censura en itch.io por los procesadores de pago.
A fecha de hoy 11-8-25, y por lo que estoy viendo en yotube, la gente que se dedica como yo, y los aficionados, han echo muchas protestas ante las censuras impuestas por los procesadores de pago ,presionados por intereses externos a ellos.
De momento se han revisado leyes sobre las libertades de EEUU, y parece ser que los procesadores o sea los intermediarios para poder comprar y vender que manejan el dinero de los clientes, no tienen autoridad para decirle a una persona adulta en que se puede gastar su dinero.
A de mas no es ilegal si los videojuegos estan marcados como desarrollados para clientela adulta.
Seria ilegal si se vendiera a niños.
Itch.io seguramente se adaptara lo mejor posible a las nuevas normas que tenga que usar para avanzar hacia delante, con suerte todo sera como antes, quizas se vigile mejor, mas correctamente el contenido para adultos que se suba a estas plataformas, es absurdo que en un videojuego en el que solo hay una escena de topless y que esta calificado para adultos se retire para un pago, que es lo que me esta ocurriendo a mi con mis desarrollos, los e tenido que poner gratuitos, al menos para que se me vea que existo yo y mi trabajo, eso si estoy alucinando con las descargas que se hacen de mis videojuegos que antes eran de pago, llevo ya mas de 500 descargas, no si la gente no es tonta no¡¡¡ estan haciendo nunca mejor dicho el agosto¡¡¡¡
Ahora me tengo que esforzar mucho mas para vender algun videojuego, y lo voy a conseguir porque a tozudo no me gana nadie.perico415 - itch.io
domingo, 10 de agosto de 2025
GDScript borra un RigidBody3D en 5 segundos sin el timer con señal;
extends RigidBody3D
func _ready():
get_tree().create_timer(5.0).timeout.connect(queue_free)
viernes, 8 de agosto de 2025
En Godot 4.4 cuando algo pasa por su area3d solo instancia 4 personajes;
extends Area3D
var Esferauno = preload("res://PIRATAMALOMORIR/PINTO MALO2 ANIMO DE MORIR.tscn")
var Esferauno1 = preload("res://PIRATAMALO/PINTO MALO1 ANIMO DE ANDARSALEDECAJA-2-.tscn")
var instancias_creadas : int = 0
const MAX_INSTANCIAS : int = 4
func _ready() -> void:
pass
func _process(delta: float) -> void:
pass
func _on_area_entered(area: Area3D) -> void:
# Verificamos si aún podemos crear más instancias.
if instancias_creadas < MAX_INSTANCIAS:
var parent = get_parent()
if parent and parent is CharacterBody3D:
var parent_global_transform = parent.global_transform
# Creamos la primera instancia
var policia_nokeado_instancia = Esferauno.instantiate()
get_tree().root.add_child(policia_nokeado_instancia)
policia_nokeado_instancia.global_transform = parent_global_transform
# Incrementamos el contador
instancias_creadas += 1
func _on_area_exited(area: Area3D) -> void:
# Verificamos si aún podemos crear más instancias.
if instancias_creadas < MAX_INSTANCIAS:
# Creamos la segunda instancia
var Esferauno1_instancia = Esferauno1.instantiate()
add_child(Esferauno1_instancia)
# Incrementamos el contador
instancias_creadas += 1
jueves, 7 de agosto de 2025
extends CharacterBody3D SE MUEVE ALEATORIAMENTE POR EL ESCENARIO INCLUSO INSTANCIADO;
# Exportamos la variable de velocidad.
@export var velocidad : float = 2.0
# Un array para guardar las 4 direcciones de movimiento.
# 0: Eje Z (adelante)
# 1: Eje X (derecha)
# 2: Eje -X (izquierda)
# 3: Eje -Z (atrás)
var direcciones : Array = [
Vector3(0, 0, 1), # Adelante en el eje Z
Vector3(1, 0, 0), # Derecha en el eje X
Vector3(-1, 0, 0), # Izquierda en el eje -X
Vector3(0, 0, -1) # Atrás en el eje -Z
]
# Un índice para saber en qué dirección del array estamos.
# Variables para manejar el tiempo manualmente.
var tiempo_transcurrido : float = 0.0
var intervalo_de_cambio : float = 0.5
func _physics_process(delta):
# Sumamos el tiempo de cada fotograma a nuestra variable.
tiempo_transcurrido += delta
# Si el tiempo transcurrido es mayor o igual al intervalo de 0.5 segundos...
if tiempo_transcurrido >= intervalo_de_cambio:
# Reiniciamos el contador de tiempo restando el intervalo.
# Esto evita errores si el tiempo excede el límite por poco.
tiempo_transcurrido -= intervalo_de_cambio
# Incrementamos el contador para pasar a la siguiente dirección.
paso_actual += 1
# Usamos el operador de módulo (%) para que el contador vuelva a 0
# después de llegar a 3 (0, 1, 2, 3, 0, 1...).
paso_actual %= 4
# Obtenemos la dirección actual del array y la multiplicamos por la velocidad.
velocity = direcciones[paso_actual] * velocidad
# Aplicamos el movimiento y gestionamos las colisiones.
move_and_slide()