domingo, 30 de marzo de 2025

puerta en Godot 4.4 abrirla;

 extends Area3D


@export var velocidad_subida: float = 1.3


var subiendo: bool = false


func _physics_process(delta):

if subiendo:

if $CSGBox3D7: # verifica si el nodo existe

$CSGBox3D7.translate(Vector3(0, velocidad_subida, 0) * delta)


func _on_area_entered(area: Area3D) -> void:

subiendo = true


func _on_area_exited(area: Area3D) -> void:

subiendo = false


GDScript giro sobre si mismo en eje "y" alterna de izquierda a derecha y de derecha a izquierda; tambien en eje "Z" ;Godot4.4;

 extends MeshInstance3D


@export var rotation_speed_y: float = 0.03

@export var rotation_speed_z: float = 0.02 # Velocidad para el eje Z (ajusta según necesites)

@export var direction_change_interval: float = 3.0


var rotation_direction_y: int = 1

var rotation_direction_z: int = 1

var time_since_direction_change: float = 0.0


func _ready() -> void:

    pass


func _process(delta: float) -> void:

    rotate_y(rotation_speed_y * rotation_direction_y)

    rotate_z(rotation_speed_z * rotation_direction_z)


    time_since_direction_change += delta


    if time_since_direction_change >= direction_change_interval:

        rotation_direction_y *= -1

        rotation_direction_z *= -1

        time_since_direction_change = 0.0

GDScript giro sobre si mismo en eje "y" alterna de izquierda a derecha y de derecha a izquierda; Godot4.4;

 extends MeshInstance3D


@export var rotation_speed: float = 0.03

@export var direction_change_interval: float = 3.0 # Intervalo de cambio de dirección en segundos


var rotation_direction: int = 1

var time_since_direction_change: float = 0.0


func _ready() -> void:

pass


func _process(delta: float) -> void:

rotate_y(rotation_speed * rotation_direction)


time_since_direction_change += delta


if time_since_direction_change >= direction_change_interval:

rotation_direction *= -1

time_since_direction_change = 0.0


GDScript baja puntuacion y escala a reduccion Sprite2D y mesh_instance_3d; hace efectos de barra de vida; funciona;Godot4.4;

 extends Area3D


var score = 10

@onready var mesh_instance_3d = $"../../CharacterBody3D/CollisionShape3D/PROTAGONISTA EXPLORADORA VARIOS MOVIMIENTOS ANDAR CORRER GRITAR_/MeshInstance3D2 PRUEBAS DE CORAZON"

@onready var sprite_rojo = $"Sprite2D rojo"

@onready var label_resta = $"Label resta"


func _ready():

actualizar_visualizacion()


func _on_area_entered(area: Area3D) -> void:

if area.is_ancestor_of(self): #evita que se active el trigger con el mismo objeto que contiene el script

return

#$AudioStreamPlayer3D.play() #si lo quieres activar descomentalo

score -= 1

actualizar_visualizacion()


if score < 0:

get_tree().change_scene_to_file("res://ESCENAS/1-world_environmentESCENA-1-.tscn")


func actualizar_visualizacion():

label_resta.text = str(score)

var escala = float(score) / 10.0

sprite_rojo.scale = Vector2(escala, escala)

mesh_instance_3d.scale = Vector3(escala, escala, escala) #se corrige para que trabaje en 3D

if score <= 0:

sprite_rojo.visible = false

mesh_instance_3d.visible = false


func _on_timer_timeout() -> void:

pass


GDScript efectos de tembleque y de bombeo de un corazon 3d MeshInstance3D;Godot4.4;

 extends MeshInstance3D


@export var shake_amount: float = 5.0

@export var shake_speed: float = 5.4


var original_position: Vector3


func _ready():

original_position = position


func _process(delta):

var random_offset = Vector3(

randf_range(-shake_amount, shake_amount),

randf_range(-shake_amount, shake_amount),

randf_range(-shake_amount, shake_amount)  # Añadido componente Z

)

position = original_position + random_offset


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

----------------------------------------------- este de debajo bombea--------------------------------------------


extends MeshInstance3D


@export var pulse_amount: float = 0.5 # Cantidad de expansión/contracción

@export var pulse_speed: float = 2.0  # Velocidad del latido


var original_scale: Vector3

var time: float = 0.0


func _ready():

original_scale = scale


func _process(delta):

time += delta * pulse_speed

var pulse = sin(time) * pulse_amount

scale = original_scale + Vector3(pulse, pulse, pulse) # Expande/contrae uniformemente


# O, si quieres que el latido sea solo en un eje (por ejemplo, el Y):

# scale = original_scale + Vector3(0, pulse, 0)


sábado, 29 de marzo de 2025

extends Sprite2D un GDScript que hace un temblor al Sprite2D, efecto bueno para imitar el miedo de un corazon;Godot4.4;

 extends Sprite2D


@export var shake_amount: float = 5.0

@export var shake_speed: float = 10.0


var original_position: Vector2


func _ready():

    original_position = position


func _process(delta):

    var random_offset = Vector2(randf_range(-shake_amount, shake_amount), randf_range(-shake_amount, shake_amount))

    position = original_position + random_offset

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

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

Explicacion: este GDScript se combina de maravilla con este enlace, en el que construyo un corazon que se va disipando, como barra de vida....Desarrollo y creacion de videojuegos.Godot,Unity,Blender,Gimp,Game Maker,: Barra de vida en Godot 4.4 en 3d; estudio GDScript;

viernes, 28 de marzo de 2025

Barra de vida en Godot 4.4 en 3d; estudio GDScript;

 extends Area3D


var score = 10


@onready var sprite = $Sprite2D  # Cambiado a Sprite2D

@onready var label_resta = $"Label resta"


func _ready():

actualizar_visualizacion()


func _on_area_entered(area: Area3D) -> void:

#$AudioStreamPlayer3D.play()

score -= 1

actualizar_visualizacion()


if score < 0:

get_tree().change_scene_to_file("res://ESCENAS/1-world_environmentESCENA-1-.tscn")


func actualizar_visualizacion():

label_resta.text = str(score)

var escala = float(score) / 10.0  # Escala basada en la puntuación (0 a 1)

sprite.scale = Vector2(escala, escala)  # Escala uniforme en 2D (Sprite2D)

if score <= 0:

sprite.visible = false  # O puedes usar queue_free() para eliminar el nodo


func _on_timer_timeout() -> void:

pass


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

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

 Explicación; Se me ocurrió crear un tipo de barra de vida para Godot 4.4. en 3d asociando un grafico al contador de puntos, cuando un personaje choca con una columna se le baja la puntuación 1 punto, a la vez esta coordinado con un grafico, e pensado en un corazón que se va des escalando de forma coordinada ala puntuación que va perdiendo el personaje.........entonces el corazón se va empequeñeciendo dando sensación de perdida de vida........Esto lo hice con ayuda de la IA, yo de programar no tengo ni idea¡¡¡

Conseguí también un cambio de escena al morir el personaje….