martes, 28 de abril de 2026

Magnifico GDScript para instanciar murcielagos desde un Area3d y calibrar desde el inspector;









 extends Area3D


# --- CONFIGURACIÓN DESDE EL INSPECTOR ---

@export_group("Recursos")

## Arrastra aquí tu archivo .tscn (el murciélago o cualquier otro)

@export var escena_a_instanciar : PackedScene 


@export_group("Tiempos de Spawner")

## Cada cuántos segundos aparece uno nuevo

@export var tiempo_entre_instancias : float = 2.0


@export_group("Movimiento Aleatorio")

## Velocidad mínima y máxima en cada eje (X, Y, Z)

@export var velocidad_x : Vector2 = Vector2(-2.0, 2.0)

@export var velocidad_y : Vector2 = Vector2(-0.5, 1.5)

@export var velocidad_z : Vector2 = Vector2(-2.0, 2.0)


@export_group("Limpieza y Optimización")

## Segundos que vivirá el objeto antes de borrarse (0 = infinito)

@export var tiempo_de_vida : float = 10.0

## Distancia máxima desde el spawner antes de borrarse (0 = sin límite)

@export var distancia_maxima : float = 50.0


var timer : float = 0.0


func _process(delta):

timer += delta

if timer >= tiempo_entre_instancias:

instanciar_criatura()

timer = 0.0


func instanciar_criatura():

if escena_a_instanciar == null:

return

# 1. Creamos la instancia

var nueva_instancia = escena_a_instanciar.instantiate()

# 2. La añadimos a la escena

get_tree().current_scene.add_child(nueva_instancia)

# 3. Posición inicial

nueva_instancia.global_position = global_position

# 4. Calculamos su velocidad aleatoria

var vel_random = Vector3(

randf_range(velocidad_x.x, velocidad_x.y),

randf_range(velocidad_y.x, velocidad_y.y),

randf_range(velocidad_z.x, velocidad_z.y)

)

# 5. Inyectamos la lógica de movimiento y auto-destrucción

var mover_script = GDScript.new()

mover_script.set_source_code("""

extends Node3D


var velocidad = Vector3.ZERO

var pos_inicio = Vector3.ZERO

var max_dist = 0.0

var vida_timer = 0.0

var max_vida = 0.0


func _process(delta):

# Movimiento

global_translate(velocidad * delta)

# Control por Tiempo

if max_vida > 0:

vida_timer += delta

if vida_timer >= max_vida:

queue_free()

# Control por Distancia

if max_dist > 0:

if global_position.distance_to(pos_inicio) >= max_dist:

queue_free()

""")

mover_script.reload()

nueva_instancia.set_script(mover_script)

# Pasamos las variables del Inspector a la instancia recién creada

nueva_instancia.velocidad = vel_random

nueva_instancia.pos_inicio = global_position

nueva_instancia.max_dist = distancia_maxima

nueva_instancia.max_vida = tiempo_de_vida


-------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

Explicacion: busco unos murcielagos que salen desde el interior de una calavera, se instancien , se crean con este GDScript desde un Area3d, y con el sistema de @export , se consigue desde el inspector del motor de juegos de Godot 4.6.2 alterar, la velocidad de las instancias, la velocidad de su movimiento por el escenario del juego , el tiempo de vida......magnifica utilizacion de la IA, hay quien dice que asi no se aprende a programar, pero yo no quiero programar, yo quiero desarrollar un videojuego, de todas formas algo si que se aprende, yo desconocia las maravillas del  @export, ademas con este GDScript puedes arrastrar al inspector la escena tscn que quieras instanciar sin tocar nada de codigo.

Es un poderoso GDScript.



domingo, 26 de abril de 2026

devlog, actualizando constantemente dia 26-04-2026;


 https://perico415.itch.io/stealing-from-the-history-museum/devlog/1500142/light-and-darkness-dia-26-4-26


Modelando con blender, reduciendo poligonos, animando objetos, trabajando luces.....ademas de juego es un simulador de enfoques de camara y de cantidad de iluminacion......

miércoles, 22 de abril de 2026

devlog; juego museo dia 22-4-26;

 

 Nuevos avances del juego del robo en el museo, mejoras de iluminación a la carta, juega con la luz que mas te guste, mejoras en la animación del personaje, mejoras en el cambio de niveles, mejoras en disparos, mejoras y mas mejoras¡¡¡¡ a día 22-4 26.


Mira el video y disfruta conmigo de este desarrollo¡¡¡¡¡¡¡¡¡





https://perico415.itch.io/stealing-from-the-history-museum/devlog/1496696/light-and-darkness-dia-22-4-26


martes, 21 de abril de 2026

La importancia de rebajar poligonos en los videojuegos;

 Trabajando mi nuevo videojuego estoy aprendiendo a poner los graficos en 3d con el menos peso posible, estoy modelando unas calaveras con blender  y hay una opcion para rebajar los poligonos, Es importante porque 5mg no ocupa mucho pero si lo puedes transformar en 24kb, pues mejor, ya que un juego terminado va sumando y sumando todos los elementos y si puede pesar terminado 1gb en lugar de 2 gb pues mas facil de publicar y de descargar en internet.



pongo unas capturas de pantalla de los pasos a seguir, yo lo exporte a formato obj es el que mejor resultado me da, y godot 4.6.2 lo soporta muy bien.    

Hay que clicar en la llave azul como se ve en la ilustracion, luego elegir la opcion Diezmar   como veis esta el numero a 0.0250 poligonos, una cantidad buenisima que ocupa muy poco espacio, antes de rebajarlo la cantidad de poligonos estaba a 1.0000   , yo blender lo tengo configurado en español, bueno variando el numero el objeto 3d es mas preciso o mas difuminado pierde definicion, cada uno a de encontrar su equilibrio .........cuantos menos poligonos menos peso cuantos mas mas peso.

Yo lo exporte a formato .obj lo pase a Godot 4.6.2 y me funciona muy bien.



lunes, 20 de abril de 2026

2.000 descargas; Gracias publico de itch.io;

 


2.000 descargas; Gracias publico de itch.io;

2.000 descargas, unas 2.000 personas tienen juegos desarrollados por mi; para mi es un orgullo, mi aficion me congratula.......a seguir trabajando, estudiando , desarrollando......mi proximo objetivo , publicar en Steam, aun esta lejano quizas 2 o 3 años mas tardare. ......pero publicare en Steam algun dia....¡¡¡si o si!!!.

domingo, 12 de abril de 2026

Aplicando @export para graduar tiempo desde el inspector; tiempo que dura una explosion; Godot 4.6.2;

 extends Node3D

# Tiempo en segundos antes de autodestruirse

@export var self_destruct_time: float = 15.0

#var self_destruct_time = 2.0


var elapsed_time = 0.0




func _process(delta: float) -> void:


elapsed_time += delta



if elapsed_time >= self_destruct_time:


queue_free()


lunes, 6 de abril de 2026

Godot 4.6.2 GDScript muy elavorado para proyectil;

 extends Area3D


# --- AJUSTES DESDE EL INSPECTOR ---

@export_group("Movimiento")

@export var velocidad: float = 15.0

@export var gravedad: float = 9.8  # Fuerza con la que cae al chocar

@export var rebote_fuerza: float = 0.2 # Un pequeño saltito al tocar la pared


@export_group("Tiempos de Vida")

@export var tiempo_vuelo_max: float = 5.0 # Se borra si no toca nada en X segundos

@export var tiempo_en_suelo: float = 3.0 # Cuánto tiempo se queda tirada en el suelo antes de borrarse


# --- VARIABLES INTERNAS ---

var chocado: bool = false

var velocidad_caida: Vector3 = Vector3.ZERO

var tiempo_total: float = 0.0


func _ready() -> void:

if not body_entered.is_connected(_on_body_entered):

body_entered.connect(_on_body_entered)


func _process(delta: float) -> void:

tiempo_total += delta

if not chocado:

# --- ESTADO 1: VOLANDO ---

# Avanza recto hacia adelante

translate(Vector3(0, 0, velocidad * delta))

# Autodestrucción por seguridad (si se pierde en el infinito)

if tiempo_total >= tiempo_vuelo_max:

queue_free()

else:

# --- ESTADO 2: CAYENDO (FÍSICA SIMULADA) ---

# Aplicamos gravedad a la velocidad de caída

velocidad_caida.y -= gravedad * delta

position += velocidad_caida * delta

# Si lleva mucho tiempo en el suelo, la borramos para ahorrar memoria

if tiempo_total >= tiempo_en_suelo:

queue_free()


func _on_body_entered(body: Node) -> void:

if chocado: return # Si ya chocó, no procesamos más choques

print("¡Impacto con: ", body.name, "! Cayendo al suelo...")

chocado = true

tiempo_total = 0.0 # Reiniciamos el cronómetro para el tiempo en el suelo

# Calculamos un pequeño rebote aleatorio para que no caiga como un palo

velocidad_caida = Vector3(

randf_range(-1, 1), 

rebote_fuerza, 

randf_range(-1, 1)

)

# Opcional: Podrías desactivar el sonido o la luz de la bala aquí

---------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------


Explicacion: este GDScript regula desde el inspector, velocidad de los proyectiles, tiempo de vida en pantalla de ellos, gravedad ,revote.....virgerias vamos todo gracias a la IA  de mi navegador de internet.