miércoles, 20 de agosto de 2025

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://evefysh.itch.io/ 

https://itch.io/profile/evefysh

https://perico415.itch.io/mmacabre-and-gothic/comments

https://perico415.itch.io/


¿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




Si, el juego se puede ampliar más, claro, y pulir más, también es cierto, decidí publicarlo porque es completo, tiene una trama mínima y un final donde ganas la partida al escapar de la persecución...vaya, vamos a pasar un enlace de YouTube donde aparezca el juego completo, hay partidas muy cortas pero todas tienen un final razonable para que sea coherente.

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!!;

https://perico415.itch.io/
 

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,.