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.
lunes, 28 de julio de 2025
videojuego de boxeo;
sábado, 26 de julio de 2025
CENSURAN PLATAFORMAS DE ALOJO DE VIDEOJUEGOS;
No me salen varios juegos mios de mi cuenta en itch.io consulte con soporte me han de contestar, me dijistes hace poco que si actualizo por ejemplo el ultimo añadiendo una mejora un nuevo video de muestra o mas capturas abeces ayuda a indexar vuelve a aparecer, lo pruebo con mi ultimo juego?
¡Entiendo tu preocupación! Es frustrante cuando tus juegos no aparecen en itch.io, y más aún cuando el soporte tarda en responder.
Has hecho bien en contactar al soporte, ya que ellos tienen la última palabra sobre los problemas de indexación. Sin embargo, lo que te comenté sobre actualizar el juego para intentar "forzar" la re-indexación es una buena estrategia que a veces funciona, especialmente si el problema no está relacionado con las recientes restricciones de contenido NSFW.
Situación actual en itch.io
Es importante que sepas que itch.io ha estado implementando cambios significativos en cómo manejan el contenido, especialmente el "Not Safe For Work" (NSFW). Parece que están bajo presión de los procesadores de pago, lo que ha llevado a que miles de juegos con contenido para adultos sean "desindexados" o incluso eliminados de las búsquedas y recomendaciones. Si alguno de tus juegos entra en esta categoría, es muy probable que este sea el motivo por el que no aparecen, y una simple actualización no lo solucionará.
¿Deberías probar a actualizar tu último juego?
Sí, te recomiendo que lo pruebes con tu último juego, especialmente si no tiene contenido NSFW. Si el problema es una falta de indexación por motivos "técnicos" o de algoritmo, añadir una mejora, un nuevo vídeo de muestra, o más capturas puede, en ocasiones, hacer que el sistema de itch.io lo "revisite" y lo indexe correctamente.
Aquí te explico por qué y cómo hacerlo:
• Para "despertar" el algoritmo: A veces, una simple edición o actualización puede hacer que el juego vuelva a entrar en la cola de revisión o indexación de itch.io.
• Mejora la visibilidad de forma natural: Incluso si no es el problema de indexación, añadir más contenido multimedia (vídeos, capturas) y una descripción más detallada siempre es bueno para atraer a más jugadores una vez que el juego esté visible.
• No pierdes nada: Dado que ya estás esperando una respuesta del soporte, intentar esto no te perjudica y podría acelerar el proceso si el problema es de indexación regular.
Qué puedes hacer:
1. Asegúrate de que no es NSFW: Si tu último juego tiene algún tipo de contenido para adultos, es muy probable que la desindexación se deba a las nuevas políticas de itch.io, y una actualización no lo cambiará. En este caso, tendrías que esperar las directrices del soporte o considerar si tu juego cumple con sus nuevos requisitos.
2. Añade contenido de calidad:
◦ Nuevo vídeo de muestra: Si no tienes uno, es el momento de añadirlo. Si ya tienes, ¿puedes hacer uno mejor o más corto que capture la esencia?
◦ Más capturas de pantalla: Cuantas más y de mejor calidad, mejor. Muestra diferentes aspectos del juego.
◦ Actualiza la descripción: Revisa la descripción de tu juego. ¿Es clara, concisa y atractiva? ¿Utiliza palabras clave relevantes?
◦ Actualiza la build del juego: Incluso un cambio menor en la build del juego puede forzar una re-indexación.
3. Guarda los cambios: Una vez que hayas añadido o actualizado el contenido, guarda los cambios en la página de tu juego en itch.io.
¿Y si el problema persiste o si es por contenido NSFW?
Si después de unos días el juego sigue sin aparecer, o si sospechas que el problema es por el contenido NSFW, entonces la respuesta del soporte será crucial. Ellos podrán decirte si tu juego ha sido marcado o si hay algún otro problema específico.
Mucha suerte con esto. Espero que tus juegos vuelvan a estar visibles pronto.
que es NSFW
NSFW son las siglas en inglés de "Not Safe For Work", que se traduce como "No Seguro Para el Trabajo" o "No Adecuado Para el Trabajo".
Se utiliza como una advertencia para indicar que un contenido (imágenes, vídeos, texto, audio, enlaces) podría ser inapropiado o ofensivo para ser visto en un entorno público, profesional (como la oficina) o en presencia de niños.
¿Qué tipos de contenido se consideran NSFW?
Aunque la definición literal se refiere al entorno laboral, en la práctica, el término NSFW se usa para una amplia gama de contenidos que se consideran explícitos o sensibles. Los tipos más comunes incluyen:
• Contenido sexual o de desnudos: Esta es la categoría más frecuente. Incluye pornografía, desnudez total o parcial, imágenes sugerentes, etc.
• Violencia y gore: Contenido gráfico que muestra violencia explícita, sangre, heridas, abusos o muerte.
• Lenguaje vulgar o profano: Uso excesivo de malas palabras o expresiones ofensivas.
• Contenido ofensivo o perturbador: Material que podría ser considerado desagradable, chocante o que promueve el odio o la discriminación.
¿Por qué es importante el etiquetado NSFW?
El etiquetado NSFW sirve para:
• Advertir a los usuarios: Permite que las personas decidan si quieren ver el contenido antes de hacer clic, evitando situaciones incómodas o problemas en su entorno.
• Cumplir con políticas de plataformas: Muchas plataformas online (redes sociales, tiendas de juegos, foros) tienen políticas estrictas sobre el contenido NSFW. Exigen que los creadores lo etiqueten correctamente o directamente lo prohíben. No hacerlo puede resultar en la desindexación, ocultación o eliminación del contenido o incluso de la cuenta.
• Proteger a menores: Ayuda a filtrar contenido que no es apto para niños.
El caso de itch.io y el contenido NSFW
Como te mencionaba, itch.io ha estado implementando cambios significativos en su política de contenido NSFW. Debido a la presión de los procesadores de pago y a campañas de grupos específicos, itch.io ha desindexado gran parte del contenido para adultos de sus páginas de búsqueda y navegación. Esto significa que, aunque el juego siga existiendo en la plataforma si tienes el enlace directo, no aparecerá en las búsquedas ni en las listas generales, lo que reduce drásticamente su visibilidad.
Si tu juego contiene elementos que itch.io clasifica como NSFW, es muy probable que esta sea la razón por la que no aparece. En estos casos, una simple actualización no lo solucionará, y la única forma de resolverlo es que el soporte de itch.io te dé una guía específica, o que evalúes si el contenido de tu juego se alinea con sus nuevas políticas para el contenido de pago.
si hay una opccion para marcar que el juego es NSFW tambien lo quitan? se que itch.io es tremendo en juegos pornograficos y brutales, osea que estan presionados externamente y estan quitando todo ese material? pues hay muchisimo, se combertira como gamejolt que esos temas los tienen proibidos? osea han quitado libertad a itch.io?
Tienes toda la razón en tus observaciones. itch.io ha sido históricamente una plataforma muy abierta y un refugio para una enorme variedad de juegos independientes, incluyendo una gran cantidad de contenido para adultos, experimental y a veces "brutal" o explícito. Y sí, están bajo una tremenda presión externa, principalmente de los procesadores de pago.
¿Están quitando todo el material NSFW aunque esté marcado?
Aquí está la situación actual, según los anuncios recientes de itch.io (que son muy recientes, de hecho, del 24 de julio de 2025):
1. Desindexación General: Itch.io ha "desindexado" (de-indexed) todo el contenido NSFW para adultos de sus páginas de navegación y búsqueda. Esto significa que, incluso si el juego estaba correctamente marcado como NSFW y era accesible antes, ya no aparecerá en las búsquedas ni en las listas de juegos (como "últimos lanzamientos", "juegos populares", etc.). Para encontrarlo, necesitarías el enlace directo al juego.
2. Presión de los Procesadores de Pago: La razón principal de esta medida drástica es la presión directa de empresas como Visa, Mastercard y PayPal. Estas empresas han sido objeto de campañas (como la de "Collective Shout" en Australia) que las presionan para que no procesen pagos para sitios que albergan cierto tipo de contenido explícito o controvertido. Si itch.io no cumple con estas demandas, corre el riesgo de perder la capacidad de procesar pagos por completo, lo que sería catastrófico para toda la plataforma y todos sus creadores.
3. Auditoría exhaustiva: Itch.io ha anunciado que está realizando una "auditoría integral de contenido" y que el contenido NSFW permanecerá "deslistado" hasta que concluya esta revisión.
4. Nuevas medidas de cumplimiento: Después de la auditoría, itch.io introducirá nuevas medidas de cumplimiento. Esto incluirá un paso en el que los creadores de páginas NSFW deberán confirmar que su contenido es admisible bajo las políticas de los procesadores de pago asociados a su cuenta.
5. Posible eliminación permanente: itch.io ha admitido que, como parte de esta revisión y la nueva política, algunas páginas serán eliminadas permanentemente de la plataforma. Los usuarios afectados serán notificados por correo electrónico.
¿Se convertirá en Game Jolt? ¿Han quitado libertad a itch.io?
• ¿Como Game Jolt? Game Jolt, como bien señalas, ya pasó por una situación similar hace unos años y prohibió explícitamente el contenido sexualmente explícito o pornográfico. La diferencia con Game Jolt es que ellos lo prohibieron de raíz. Itch.io, al menos de momento, está desindexando y revisando, no prohibiendo categóricamente todo el NSFW (aunque el resultado práctico es muy similar en términos de visibilidad). Sin embargo, la presión es tan grande que existe la posibilidad real de que se endurezcan las políticas y se acerque más a la postura de Game Jolt para todo el contenido de pago.
• ¿Han quitado libertad a itch.io? Sí, en un sentido muy real, se ha reducido la libertad en itch.io, o al menos la visibilidad de ciertos tipos de contenido. Esta no es una decisión que itch.io haya tomado por gusto, sino por necesidad operativa. Como ellos mismos han declarado, su capacidad para procesar pagos es fundamental para todos los creadores de la plataforma. Para garantizar que puedan seguir funcionando, se ven obligados a priorizar su relación con los socios de pago y cumplir con sus exigencias.
La ironía y la preocupación general
Es una situación frustrante y preocupante para muchos desarrolladores y usuarios. Itch.io era valorado precisamente por su apertura y por ser un espacio donde el contenido más experimental, de nicho o "adulto" podía prosperar, a menudo hecho por creadores independientes y queer que exploraban temáticas que no tienen cabida en plataformas más mainstream.
La ironía es que, a menudo, estas campañas de presión de terceros (como "Collective Shout") no se dirigen directamente a las plataformas, sino a la infraestructura financiera que las sustenta. Al amenazar con cortar los servicios de pago, estas organizaciones y los propios procesadores de pago ejercen un control indirecto sobre el tipo de contenido que puede existir en línea, incluso si es legal en muchas jurisdicciones.
En resumen, la opción de marcar el juego como NSFW ya no garantiza que sea visible en las búsquedas o la navegación general. Itch.io está en un punto crítico, intentando equilibrar su misión como plataforma abierta con la necesidad de mantener sus servicios de pago. Es un golpe significativo a la diversidad de contenido que caracterizaba a itch.io.
boy a mirar itch.io haber sia tiene contenido pornografico de otros desarrolladores, no me fije.
Acabas de dar con el clavo. Si intentas buscar contenido NSFW ahora mismo en itch.io, te darás cuenta de que la inmensa mayoría de ese material ya no aparece en las búsquedas ni en las páginas de navegación (como "últimos lanzamientos", "juegos populares", etc.).
La situación actual en itch.io con el contenido NSFW
Itch.io ha confirmado oficialmente que ha "desindexado" todo el contenido adulto/NSFW de sus páginas de navegación y búsqueda. Esto es un cambio masivo y muy reciente.
¿Por qué ha pasado esto? Como ya te había comentado, la razón principal es la presión externa, específicamente de los procesadores de pago como Visa, Mastercard y PayPal. Organizaciones como "Collective Shout" en Australia han estado presionando a estas compañías para que dejen de procesar pagos para plataformas que alojan ciertos tipos de contenido explícito.
Itch.io ha declarado que tuvieron que actuar de forma urgente y sin previo aviso a los desarrolladores para proteger su "infraestructura de pagos", ya que si perdieran la capacidad de procesar transacciones, la plataforma entera estaría en grave peligro.
¿Significa esto que el contenido ha sido eliminado por completo? No necesariamente eliminado del todo, pero sí fuertemente restringido en su visibilidad.
• Desindexado: Los juegos y proyectos NSFW siguen existiendo en la plataforma si tienes el enlace directo a ellos. Puedes acceder a ellos si los tenías en tu biblioteca o si alguien te comparte el link.
• Auditoría y Posible Eliminación: Itch.io está llevando a cabo una "auditoría integral de contenido". Durante este proceso, el contenido NSFW permanecerá desindexado. Una vez que concluya la auditoría, se introducirán nuevas medidas de cumplimiento, y algunas páginas serán eliminadas permanentemente de la plataforma. Los desarrolladores afectados serán notificados.
• Impacto masivo: Se estima que esta medida ha afectado a miles de juegos (algunos sugieren que más de 20,000) que antes eran fácilmente accesibles.
¿Se ha quitado libertad a itch.io?
Sí, la conclusión es clara: se ha reducido la libertad de contenido en itch.io debido a estas presiones externas. Itch.io era conocida por su política de "casi todo vale" y por ser un espacio seguro para el contenido independiente y a menudo experimental o de nicho, incluyendo una gran cantidad de juegos NSFW.
Ahora, la plataforma se ve forzada a alinearse con las políticas de contenido de los procesadores de pago para poder seguir operando. Esto cambia significativamente el panorama de itch.io y lo acerca, en cierto modo, a las políticas más restrictivas que ya se ven en otras plataformas como Game Jolt para ciertos tipos de contenido.
Es una situación compleja y frustrante para muchos desarrolladores que dependían de itch.io como un lugar para publicar y vender sus juegos, especialmente aquellos con temáticas para adultos.
e buscado la etiqueta erotic los mas vendidos y han desaparecido todos....
¡Claro! Eso confirma exactamente lo que te decía. La etiqueta "erotic" y cualquier otra relacionada con contenido adulto/NSFW han sido desindexadas y ocultadas de las búsquedas y páginas de navegación de itch.io de forma masiva y reciente.
No es que los juegos hayan desaparecido por completo de la plataforma (si tienes el enlace directo, aún podrías acceder a muchos de ellos por ahora), sino que itch.io los ha hecho invisibles para el público general a través de las funciones de búsqueda y exploración. Esto incluye categorías populares, los más vendidos, los últimos añadidos, etc.
Resumen de la situación:
• Desaparición de Búsquedas: Es normal que no encuentres nada al buscar "erotic" o etiquetas similares en las páginas de navegación. Itch.io ha implementado una "desindexación" generalizada de todo el contenido NSFW.
• Presión Externa: Esta medida es una respuesta directa y urgente a la presión de los principales procesadores de pago (Visa, Mastercard, PayPal) que, a su vez, están siendo presionados por grupos activistas que denuncian cierto tipo de contenido en plataformas de juegos.
• Supervivencia de la Plataforma: Itch.io ha declarado que esta acción era crítica para proteger su "infraestructura de pagos". Si perdieran la capacidad de procesar pagos, la plataforma entera y la subsistencia de miles de desarrolladores se verían comprometidas.
• Auditoría en Curso: Actualmente, itch.io está llevando a cabo una auditoría exhaustiva de contenido. Durante este proceso, los juegos NSFW permanecerán desindexados.
• Futuro Incierto: Una vez que termine la auditoría, se introducirán nuevas medidas de cumplimiento. Es probable que algunos juegos sean eliminados permanentemente, y los desarrolladores de contenido NSFW restante deberán confirmar que su material cumple con las políticas de los procesadores de pago.
En definitiva, lo que has observado es la manifestación directa de estos cambios drásticos. itch.io, una plataforma que valoraba mucho la libertad creativa, se ha visto forzada a tomar estas medidas para poder seguir operando. Es una señal clara de cómo las políticas de las empresas de servicios financieros pueden tener un impacto masivo en el tipo de contenido que está disponible en internet.
que fuerte se va a perder muchisimo dinero por todos sitios de, desarroyadores, de la plataforma itch.io, incluso de los que han promovido presinado para que ocurra, crees que puede desaparecer itch.io, y en steam ese contenido no es tan brutal verdad? aunque la calidad es muy superior con todos sus juegos...
Es un análisis muy acertado. La situación es realmente compleja y tiene repercusiones importantes en varios frentes.
Pérdida de dinero por todos lados
Tienes toda la razón. Habrá una pérdida significativa de ingresos:
1. Desarrolladores: Los desarrolladores de juegos NSFW (especialmente aquellos que se enfocan en ese nicho) van a perder una fuente importante de ingresos y visibilidad. Algunos de estos desarrolladores son creadores independientes que dependen en gran medida de plataformas como itch.io para vender sus obras. Muchos de sus juegos estaban entre los "más vendidos" o generaban ingresos constantes.
2. Itch.io: La propia plataforma perderá su porcentaje de las ventas de estos juegos. Si bien el contenido NSFW podría haber sido una fracción del volumen total de juegos, representaba una base de usuarios y un nicho lucrativo.
3. Los que promovieron la presión: Irónicamente, si estas restricciones llevan a una reducción general de la actividad económica en las plataformas o a que los desarrolladores busquen otras vías (potencialmente menos controladas), los propios procesadores de pago podrían ver una disminución en las transacciones que procesan. No obstante, para ellos, la prioridad es mitigar el riesgo de reputación y las multas, lo cual supera los ingresos de un nicho específico.
¿Puede desaparecer itch.io?
Es poco probable que itch.io desaparezca por completo, al menos no directamente por esto. Itch.io es una plataforma muy querida por su espíritu indie, su estructura de reparto de ingresos flexible, y por ser un lugar para juegos experimentales y "bundles" solidarios. Tiene una base de usuarios y desarrolladores muy leales más allá del contenido NSFW.
Sin embargo, esta situación sí representa un golpe muy duro a su identidad y modelo de negocio, especialmente en lo que respecta a la venta de juegos pagados.
• Riesgo de estancamiento: Si no pueden procesar pagos sin estas restricciones, perderán una parte de su mercado. Si los desarrolladores NSFW migran, o los nuevos no se sienten bienvenidos, la plataforma podría perder parte de su vitalidad.
• Modelo de ingresos: El gran desafío para itch.io es cómo monetizar si tienen que restringir lo que puede ser pagado a través de los canales tradicionales. Algunos desarrolladores podrían moverse a plataformas de suscripción o de contenido exclusivo (Patreon, OnlyFans para juegos, etc.) que tienen sus propios procesadores de pago que sí permiten este tipo de contenido (a menudo con un mayor porcentaje de ganancia para la plataforma y/o creador, pero con un alcance más limitado).
En resumen: No desaparecerá de la noche a la mañana, pero su futuro como plataforma abierta para todo tipo de contenido, especialmente el de pago, se ve seriamente comprometido.
¿Y en Steam? Contenido brutal y calidad
Este es un punto clave. Steam también está sintiendo la misma presión, y de hecho, ya ha empezado a actuar.
• Restricciones en Steam: Recientemente (como puedes ver en los resultados de búsqueda, ¡incluso con noticias de hace unos días!), Valve (propietaria de Steam) ha actualizado sus normas para vetar contenido adulto que incomode a bancos y procesadores de pago. Esto ha resultado en la eliminación de cientos de juegos +18 de su tienda, especialmente aquellos con temáticas consideradas más controvertidas o "tabú" (incesto, esclavitud, violencia sexual explícita, etc.).
• "Brutalidad" en Steam: Steam siempre ha tenido juegos con alto contenido de violencia y gore, incluso "brutal", porque no son lo mismo que el contenido sexualmente explícito en términos de la presión de los procesadores de pago. Lo que a los procesadores de pago y los grupos de presión les preocupa mayormente es el contenido sexual explícito, y aún más, las temáticas sexuales consideradas "ilegales" o "controversiales" como las que mencioné. La violencia, incluso si es muy gráfica, generalmente no activa las mismas alarmas de los procesadores de pago.
• Calidad vs. Contenido: La "calidad" de los juegos en Steam (a menudo juegos AAA o indies con alto valor de producción) es una ventaja, pero no los exime de estas presiones. Aunque muchos juegos en Steam tienen una calidad visual y de jugabilidad muy superior a la media de itch.io, eso no los protege de las políticas de contenido que les imponen los socios financieros. Si un juego de alta calidad en Steam tiene contenido que viola estas nuevas políticas, también será eliminado.
Conclusión: La "censura financiera" es una tendencia creciente que afecta a todas las plataformas que manejan transacciones de pago. Itch.io y Steam, aunque muy diferentes en su escala y tipo de contenido dominante, están experimentando la misma presión para alinear sus políticas con las expectativas de los proveedores de servicios financieros. Esto reduce el espacio para el contenido más "extremo" o explícito en las principales tiendas digitales.
ENTONCES UN SIMPLE DESNUDO DE MUJER EN UNA DUCHA, EN 3D MODELADO CON BLENDER, ESTA CENSURADO?
Basándome en la información actual y las recientes acciones de itch.io y Steam, la respuesta es sí, un simple desnudo de mujer en una ducha, modelado en 3D con Blender, tiene una alta probabilidad de ser censurado o, al menos, severamente restringido en su visibilidad.
Aquí te explico por qué:
En itch.io:
Desindexación General: Itch.io ha desindexado todo el contenido marcado como NSFW o adulto. Esto significa que, incluso si tu juego tiene un desnudo "suave" (como una mujer en la ducha) y está correctamente etiquetado como NSFW, no aparecerá en las búsquedas, los listados de "más vendidos", "nuevos", "populares", etc. Para que alguien lo encuentre, necesitará el enlace directo, lo que reduce drásticamente su visibilidad y potencial de ventas.
Auditoría y Directrices Futuras: Itch.io está en proceso de una auditoría integral de contenido. Después de esto, se implementarán nuevas directrices y los creadores de contenido NSFW deberán confirmar que su material cumple con las políticas de los procesadores de pago. Aunque un desnudo en la ducha no es "ilegal", los procesadores de pago tienen sus propias definiciones de lo que consideran "aceptable" para sus redes. Es un área gris, y la tendencia actual es hacia una mayor restricción.
En Steam:
Nuevas Reglas de Procesadores de Pago: Steam también ha actualizado sus políticas recientemente (a mediados de julio de 2025) para prohibir "ciertos tipos de contenido solo para adultos" que puedan violar las reglas y estándares de sus procesadores de pago y redes de tarjetas.
Vaguedad y Ambigüedad: El problema es que Valve (Steam) ha sido deliberadamente vaga en su definición de qué es "cierto tipo de contenido". No han dado una lista explícita, dejando a los desarrolladores en la incertidumbre. Sin embargo, las noticias indican que ya han eliminado cientos de juegos +18, especialmente aquellos con temáticas más controvertidas.
Naturaleza del Desnudo: Si el desnudo es artístico, no sexualizado, o aparece en un contexto de jugabilidad no explotadora, Steam solía ser más permisivo si estaba bien etiquetado y detrás de una puerta de edad. Sin embargo, la presión actual se centra en cualquier contenido sexualmente explícito que pueda generar incomodidad a los socios financieros. Un desnudo completo, incluso en un contexto de ducha, podría ser considerado explícito por estos estándares.
Contexto es Clave, pero el Riesgo es Alto: Si el juego fuera una simulación de vida realista donde la ducha es un momento cotidiano no sexualizado, podría tener una chance. Pero si el enfoque es erótico, o si el desnudo es el principal atractivo visual, el riesgo de ser eliminado o severamente restringido es muy alto.
En resumen:
La era de la libertad casi total para el contenido NSFW, incluso el "suave", está terminando en las principales plataformas de distribución de juegos. Las decisiones ya no las toman solo las plataformas basándose en sus propias normas, sino que están siendo dictadas por las políticas de riesgo y reputación de las empresas financieras (Visa, Mastercard, PayPal, etc.).
Un simple desnudo, aunque sea un modelo 3D y en un contexto aparentemente "inocente" como una ducha, es susceptible de ser clasificado como "contenido que puede violar los estándares de los procesadores de pago". Esto lleva a la desindexación, la eliminación de la visibilidad y, en algunos casos, la eliminación total del juego de la tienda.
Es una realidad dura para los creadores que exploran estos temas, incluso de manera artística o no puramente pornográfica.
viernes, 25 de julio de 2025
Videojuego cañones verano 2017;
jueves, 24 de julio de 2025
https://perico415.itch.io/.......;
miércoles, 23 de julio de 2025
GDScript para godot4.4 desde un Area3d cullo padre es un CharacterBody3D2 y persigue a un Player, destruye por colision ambos;
extends Area3D
# Asegúrate de que estas rutas sean EXACTAMENTE correctas.
# Si el nombre del archivo tiene un espacio o un carácter especial, Godot lo necesita así.
var Esferauno = preload("res://POLICIA LIMPIO-3- AMPLIO ANIMACIONES/POLICIA NOKEADO.tscn") # ¡Revisa esta línea!
var Esferauno1 = preload("res://DIENTES Y SANGRE BOLANDO/area_3d_diente.tscn")
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_area_entered(area: Area3D) -> void:
var parent = get_parent()
if parent and parent is CharacterBody3D:
parent.queue_free()
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:
# Asegúrate de que no estás usando 'var' aquí, ya que Esferauno ya está declarado globalmente.
var Esferauno_instancia = Esferauno.instantiate()
add_child(Esferauno_instancia)
var Esferauno1_instancia = Esferauno1.instantiate()
add_child(Esferauno1_instancia)
pass
---------------------------------------------------------------------------------------------------------------------
ESTE DE LA PARTE INFERIOR ES EL PERFECTO INSTANCIA AL ENEMIGO DERRIBADO TAMBIEN Y DESPEJA COMPLETAMENTE DE RESTOS EL ESCENARIO
-----------------------------------------------------------------------------------------------------------------------------
extends Area3D
var Esferauno = preload("res://POLICIA LIMPIO-3- AMPLIO ANIMACIONES/POLICIA NOKEADO.tscn")
var Esferauno1 = preload("res://DIENTES Y SANGRE BOLANDO/area_3d_diente.tscn")
func _ready() -> void:
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.
pass
domingo, 20 de julio de 2025
Borrar por tiempo y animar , sin temporizador,GDScript Godot 4.4;
extends Node3D
@export var tiempo_para_borrar: float = 5.0 # Tiempo en segundos antes de que el nodo se borre
func _ready() -> void:
$AnimationPlayer.play("mixamo_com")
# Creamos un nuevo nodo Timer
var temporizador = Timer.new()
add_child(temporizador) # Añadimos el temporizador como hijo
temporizador.wait_time = tiempo_para_borrar # Establecemos el tiempo de espera
temporizador.one_shot = true # Aseguramos que el temporizador se ejecute solo una vez
temporizador.start() # Iniciamos el temporizador
# Esperamos a que el temporizador termine
await temporizador.timeout
# Una vez que el temporizador ha terminado, borramos el nodo
queue_free()
jueves, 17 de julio de 2025
GDScript Godot 4.4 abrir puertas en eje "x" de lado a alado no en eje "y" de arriba abajo;
extends Area3D
@export var velocidad_subida: float = 3.3
@export var velocidad_bajada: float = 3.3 # Cambié el nombre para mayor claridad
@export var altura_maxima: float = 1.0 # Altura máxima que subirá el objeto
@export var altura_inicial: float = 0.0 # Altura inicial del objeto
var objeto: Node3D # Variable para almacenar el nodo CSGBox3D7
var subiendo: bool = false
var bajando: bool = false
var altura_actual: float = 0.0
@onready var sonido_puerta = $AudioStreamPlayer3D # ¡Añade esta línea! Asegúrate de que el nodo AudioStreamPlayer3D se llame 'AudioStreamPlayer3D' o ajusta el nombre si lo cambiaste.
func _ready():
#objeto = $CSGBox3D7 # Asignamos el nodo a la variable
objeto = $"CSGBox3D6 PUERTACARCEL" # Asignamos el nodo a la variable
altura_actual = objeto.position.x # Obtiene la altura inicial del objeto
altura_inicial = altura_actual # guarda la altura inicial
func _physics_process(delta):
if objeto: # Verifica si el objeto existe
if subiendo:
altura_actual += velocidad_subida * delta
altura_actual = min(altura_actual, altura_inicial + altura_maxima) # Limita la altura máxima
objeto.position.x = altura_actual
if altura_actual >= altura_inicial + altura_maxima:
subiendo = false # Detiene la subida al alcanzar la altura máxima
elif bajando:
altura_actual -= velocidad_bajada * delta
altura_actual = max(altura_actual, altura_inicial) # Limita la altura mínima
objeto.position.x = altura_actual
if altura_actual <= altura_inicial:
bajando = false # Detiene la bajada al alcanzar la altura inicial
func _on_area_entered(area: Area3D) -> void:
subiendo = true
bajando = false
# ¡Añade esta línea para reproducir el sonido!
if sonido_puerta and not sonido_puerta.playing: # Verifica que el nodo existe y no está sonando ya
sonido_puerta.play()
func _on_area_exited(area: Area3D) -> void:
subiendo = false
bajando = true
# Puedes añadir un sonido diferente para cuando la puerta baja aquí si lo deseas
# Por ejemplo:
# if sonido_puerta and sonido_puerta.playing: # O puedes usar otro AudioStreamPlayer3D para el sonido de bajada
# sonido_puerta.stop() # Detiene el sonido si aún está sonando al salir
domingo, 13 de julio de 2025
Un MeshInstance3D gira con alternancias sobre si mismo, GDScript para Godot 4.4;
extends MeshInstance3D
@export var rotation_speed_min := 0.5
@export var rotation_speed_max := 2.0
@export var rotation_change_interval := 2.0
var current_rotation_speed := 0.0
var time_since_last_change := 0.0
var current_axis := Vector3.ZERO
func _ready():
_set_new_rotation_parameters()
func _process(delta):
time_since_last_change += delta
if time_since_last_change >= rotation_change_interval:
_set_new_rotation_parameters()
time_since_last_change = 0.0
# Apply rotation
rotate_object_local(current_axis, current_rotation_speed * delta)
func _set_new_rotation_parameters():
# Randomize rotation speed
current_rotation_speed = randf_range(rotation_speed_min, rotation_speed_max)
# Randomize rotation axis
var random_x = randf_range(-1.0, 1.0)
var random_y = randf_range(-1.0, 1.0)
var random_z = randf_range(-1.0, 1.0)
current_axis = Vector3(random_x, random_y, random_z).normalized()
Conclusiones sobre aprovechar animaciones de mixamo para proyectos para Godot 4.4.;
Conclusiones sobre aprovechar animaciones de mixamo para proyectos para Godot 4.4.
1- Hay que cambiar el cuerpo que usa mixamo, el que tiene mixamo pegado al esqueleto de sus animaciones.
2- Desde Blender hay que borrar el cuerpo que viene pegado a los huesos, el que nos viene desde mixamo, luego hay que importar un cuerpo nuevo, en mi caso desde makehuman, mas adelante puede retocarse modelarse con blender,
3-El esqueleto no encajara en el nuevo cuerpo, a mi me da buen resultado deformar los huesos y adaptarlos al nuevo cuerpo, funciona, luego hay que fusionar ese esqueleto al cuerpo nuevo echo por nosotros.
4- Las animaciones me causaron problemas de que se meten dentro del cuerpo del personaje de forma extraña, no hay problema¡¡¡
5-El personaje echo por nosotros y fusionado con el esqueleto que nosotros emos retocado su tamaño para que encaje con el nuevo modelo , lo volvemos a subir a mixamo, desde mixamo lo retocamos con la opccion Character Arm-Space que hace que los huesos en movimiento se separen del cuerpo de forma controlada y ya esta¡¡¡
6- Descargamos de mixamo nuestro modelo trabajado por nosotros y manipulado por mixamo y todo fantástico¡¡¡¡ resuelto¡¡¡¡
miércoles, 9 de julio de 2025
Sobre el esfuerzo de desarrollar videojuegos¡¡¡¡¡¡¡............;
Sobre el esfuerzo de desarrollar videojuegos¡¡¡¡¡¡¡............;
Es laborioso, realmente es todo trabajo, no es jugar, bueno, tambien es jugar, pero que detras hay esfuerzo,, no sale solo.
---------------------------------------------------
OPINION DE LA IA:
¡Así es, lo has captado perfectamente! Lo que describes es la esencia del desarrollo de videojuegos. A menudo, la gente ve el resultado final, el juego funcionando, y no se da cuenta de todo el esfuerzo, la paciencia y el trabajo que hay detrás.
La Dualidad del Desarrollo: Trabajo y Juego
Es una mezcla fascinante de:
Trabajo intenso: Horas de código, depuración, ajuste de números, diseño, pruebas y sí, esos momentos de "prueba y error" que mencionabas con el colisionador. Es un proceso metódico que requiere disciplina y perseverancia.
Creatividad y juego: Pero a la vez, es un tipo de trabajo que te permite ser increíblemente creativo. Cada ajuste que haces, cada problema que resuelves para que algo "se sienta bien", es una pequeña victoria que alimenta esa chispa. Es "jugar" en el sentido de experimentar, de dar forma a una idea, de ver cómo algo que solo existía en tu mente cobra vida.
Es como construir un castillo de arena: parece un juego, pero requiere saber cuándo añadir agua, cuándo compactar, cómo dar forma para que no se caiga. No sale solo; hay un esfuerzo consciente en cada paso.
Tu experiencia resalta lo gratificante que es cuando, después de todo ese trabajo, logras que el sonido, la animación y la interacción se sincronicen perfectamente. ¡Esa sensación de "lo he conseguido" es el verdadero premio!
martes, 8 de julio de 2025
Instancia y noquea por desgaste lentamente para Godot 4.4. en GDScript;
extends Area3D
var score = 30
@onready var mesh_instance_3d = $"MeshInstance3D CORAZON"
@onready var sprite_rojo = $Sprite2D
@onready var label_resta = $Label
@onready var mesh_instance_3d1 = $CorazonEncojo
@onready var AudioStreamPlayer3DGOLPE = $AudioStreamPlayer3DGOLPE
# Pre-carga la escena del personaje abatido.
# ¡IMPORTANTE!: Asegúrate de que esta ruta sea correcta en tu proyecto.
const CHAS_ABATIDO_SCENE = preload("res://POLICIA LIMPIO-3- AMPLIO ANIMACIONES/POLICIA NOKEADO SUSTITUYE AL KIETO.tscn")
func _ready():
actualizar_visualizacion()
func _on_area_entered(area: Area3D) -> void:
$AudioStreamPlayer3DGOLPE.play()
# Evita que el área colisione consigo misma si está configurada así.
if area == self:
return
score -= 1
actualizar_visualizacion()
func actualizar_visualizacion():
label_resta.text = str(score)
var escala = float(score) / 30.0
sprite_rojo.scale = Vector2(escala, escala)
mesh_instance_3d.scale = Vector3(escala, escala, escala)
mesh_instance_3d1.scale = Vector3(escala, escala, escala)
if score <= 0:
# Oculta los componentes visuales del corazón
sprite_rojo.visible = false
mesh_instance_3d.visible = false
mesh_instance_3d1.visible = false
label_resta.visible = false
# Guarda la posición global actual del Area3D antes de eliminarlo
var current_global_transform = global_transform
# Elimina la propia Area3D que contiene este script
queue_free()
print("La Area3D del corazón ha sido eliminada al llegar a 0.")
# Instancia la escena del personaje abatido
if CHAS_ABATIDO_SCENE != null:
var chas_abatido_instance = CHAS_ABATIDO_SCENE.instantiate()
# Asegúrate de que la instancia se creó correctamente
if is_instance_valid(chas_abatido_instance):
# Establece la posición global de la nueva instancia a la del Area3D eliminado
chas_abatido_instance.global_transform = current_global_transform
# Añade la nueva instancia a la escena.
# Lo ideal es añadirla al mismo padre que tenía el Area3D del corazón.
# Si no hay padre o es inválido, se añade a la raíz del árbol.
get_tree().get_root().add_child(chas_abatido_instance)
print("Instanciado CHASABATIDO-1-.tscn en la posición del corazón eliminado.")
else:
print("ERROR: No se pudo instanciar CHASABATIDO-1-.tscn. La escena podría estar corrupta.")
else:
print("ERROR: CHASABATIDO-1-.tscn no se pudo pre-cargar. Revisa la ruta.")
func _on_timer_timeout() -> void:
pass
func _on_area_exited(area: Area3D) -> void:
pass
domingo, 6 de julio de 2025
GDScript para Godot 4.4. encoje corazon como barra de vida y cambia la escena; tambien provoca un sonido de golpe...;
extends Area3D
var score = 30
#@onready var mesh_instance_3d = $"../../CharacterBody3D/CollisionShape3D/PROTAGONISTA EXPLORADORA VARIOS MOVIMIENTOS ANDAR CORRER GRITAR_/MeshInstance3D2 PRUEBAS DE CORAZON"
@onready var mesh_instance_3d = $"MeshInstance3D CORAZON"
#@onready var sprite_rojo = $"Sprite2D rojo"
@onready var sprite_rojo = $Sprite2D
#@onready var label_resta = $"Label resta"
@onready var label_resta = $Label
@onready var mesh_instance_3d1 = $CorazonEncojo
@onready var AudioStreamPlayer3DGOLPE = $AudioStreamPlayer3DGOLPE
func _ready():
actualizar_visualizacion()
func _on_area_entered(area: Area3D) -> void:
$AudioStreamPlayer3DGOLPE.play()
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://PRESO LOCOCACHASGRANDE/CHASABATIDO-1-.tscn")
func actualizar_visualizacion():
label_resta.text = str(score)
var escala = float(score) / 30.0
sprite_rojo.scale = Vector2(escala, escala)
mesh_instance_3d.scale = Vector3(escala, escala, escala) #se corrige para que trabaje en 3D
mesh_instance_3d1.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
func _on_area_exited(area: Area3D) -> void:
pass # Replace with function body.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------EXPLICACION: GDScript para Godot 4.4. encoje corazon como barra de vida y cambia la escena; tambien provoca un sonido de golpe...; ES EL PRIMER GDSCRIPT EL CUAL LO RAZONO, Y LE AÑADO LAS LINEAS DE CODIGO NECESARIAS PARA PRODUCIR UN SONIDO CUANDO ALGO ENTRA EN ESE AREA......GOLPES¡¡¡¡
martes, 1 de julio de 2025
Instanciar en Godot 4.4 con botones del mouse izquierdo y derecho y con letra "R" usando accion PATADAMEDIA;GOLPES REPETITIVOS CONSTANTES ASTA SOLTAR TECLA Y O BOTONES DEL MOUSE;
extends Area3D
var Bullet = preload("res://PROTAGONISTA/area_3dPROLLECTIL.tscn")
func _input(event):
# Instanciar al presionar el botón izquierdo del ratón
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
# Retrasar la instanciación del proyectil
await get_tree().create_timer(0.5).timeout
var bullet = Bullet.instantiate()
add_child(bullet)
# Instanciar al presionar el botón derecho del ratón
if event.button_index == MOUSE_BUTTON_RIGHT and event.pressed:
await get_tree().create_timer(0.5).timeout
var bullet = Bullet.instantiate()
add_child(bullet)
# Instanciar al presionar la tecla "R" (usando la acción "PATADAMEDIA")
# ¡Asegúrate de que "PATADAMEDIA" esté configurada **exactamente así** en Project Settings -> Input Map para la tecla R!
if event.is_action_pressed("PATADAMEDIA"):
await get_tree().create_timer(1.15).timeout
var bullet = Bullet.instantiate()
add_child(bullet)
--------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
Explicacion: en mi nuevo videojuego e conseguido fluidez en animaciones y asignar al teclado varias acciones de golpear enemigos..........
----------------------------------------------------------------------------------------------------------
----------------------------------------------------------
MEJORA AMPLIACION DEL GDSCRIPT:
EXPLICACION: GOLPES REPETITIVOS CONSTANTES ASTA SOLTAR TECLA Y O BOTONES DEL MOUSE
---------------------------------------------------------------------------------------------------------------------------
extends Area3D
var Bullet = preload("res://PROTAGONISTA/area_3dPROLLECTIL.tscn")
# --- Banderas de estado para los botones del ratón ---
var is_mouse_left_pressed: bool = false
var is_mouse_right_pressed: bool = false
# Para la tecla R, no necesitamos una bandera 'is_pressed' separada en _input,
# ya que su estado se maneja directamente con la acción en _process.
# --- Variables de control para los cooldowns (TIEMPOS DE RECARGA UNIFICADOS) ---
# Cooldown general para la acción de disparo / instanciación
var fire_cooldown: float = 0.5 # 0.5 segundos entre disparos para ratón y 'R'
# Banderas para controlar si cada acción puede disparar (está fuera de cooldown)
var can_fire_left_mouse: bool = true
var can_fire_right_mouse: bool = true
var can_fire_patadamedia: bool = true # Para la tecla 'R'
# --- Nodos Timer (creados y gestionados en _ready) ---
var left_mouse_timer: Timer
var right_mouse_timer: Timer
var patadamedia_timer: Timer
func _ready() -> void:
# --- Inicialización de temporizadores para los botones del ratón ---
# Temporizador para el botón izquierdo del ratón
left_mouse_timer = Timer.new()
add_child(left_mouse_timer)
left_mouse_timer.wait_time = fire_cooldown
left_mouse_timer.one_shot = true
left_mouse_timer.timeout.connect(func(): can_fire_left_mouse = true) # Resetea el cooldown
# Temporizador para el botón derecho del ratón
right_mouse_timer = Timer.new()
add_child(right_mouse_timer)
right_mouse_timer.wait_time = fire_cooldown
right_mouse_timer.one_shot = true
right_mouse_timer.timeout.connect(func(): can_fire_right_mouse = true) # Resetea el cooldown
# --- Inicialización del temporizador para la acción 'PATADAMEDIA' (Tecla R) ---
patadamedia_timer = Timer.new()
add_child(patadamedia_timer)
patadamedia_timer.wait_time = fire_cooldown # ¡Usa el mismo cooldown!
patadamedia_timer.one_shot = true
patadamedia_timer.timeout.connect(func(): can_fire_patadamedia = true) # Resetea el cooldown
func _input(event: InputEvent) -> void:
# --- Lógica para actualizar el estado de los botones del ratón (rápida y sin awaits) ---
if event is InputEventMouseButton:
# Botón Izquierdo
if event.button_index == MOUSE_BUTTON_LEFT:
is_mouse_left_pressed = event.pressed # True si se presiona, False si se suelta
# Botón Derecho
if event.button_index == MOUSE_BUTTON_RIGHT:
is_mouse_right_pressed = event.pressed # True si se presiona, False si se suelta
# --- La tecla "R" (PATADAMEDIA) ya no necesita await aquí.
# Su lógica de instanciación se moverá completamente a _process.
# Esto es para asegurar que todas las acciones de disparo continuo se gestionen de forma similar.
func _process(delta: float) -> void:
# --- Lógica de Disparo/Instanciación para el Botón Izquierdo del Ratón ---
if is_mouse_left_pressed and can_fire_left_mouse:
can_fire_left_mouse = false # Pone el cooldown
instantiate_bullet() # Llama a la función unificada de instanciación
left_mouse_timer.start() # Inicia el temporizador de cooldown
# --- Lógica de Disparo/Instanciación para el Botón Derecho del Ratón ---
if is_mouse_right_pressed and can_fire_right_mouse:
can_fire_right_mouse = false # Pone el cooldown
instantiate_bullet() # Llama a la función unificada de instanciación
right_mouse_timer.start() # Inicia el temporizador de cooldown
# --- Lógica de Disparo/Instanciación para la acción "PATADAMEDIA" (Tecla R) ---
# is_action_pressed se usa aquí para detectar si la tecla R está siendo MANTENIDA.
# Si la quieres solo al "golpe" inicial y luego cooldown, usarías is_action_just_pressed.
# Para "automático al mantener", is_action_pressed es correcto.
if Input.is_action_pressed("PATADAMEDIA") and can_fire_patadamedia:
can_fire_patadamedia = false # Pone el cooldown
instantiate_bullet() # Llama a la función unificada de instanciación
patadamedia_timer.start() # Inicia el temporizador de cooldown
# --- Función unificada para instanciar la bala ---
func instantiate_bullet() -> void:
var bullet = Bullet.instantiate()
# Aquí podrías ajustar la posición de la bala si es necesario,
# por ejemplo: bullet.global_transform.origin = global_transform.origin + Vector3(0, 0, -2)
add_child(bullet)
-------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
EXPLICACION; PERSONALIZA CADA TIEMPO DE CADA GOLPE DIFERENTE....
PATADA PUÑETAZO IZQUIERDO PUÑETAZO DERECHO TODO PERSONALIZADO.......
--------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
extends Area3D
var Bullet = preload("res://PROTAGONISTA/area_3dPROLLECTIL.tscn")
# --- Banderas de estado para los botones del ratón ---
var is_mouse_left_pressed: bool = false
var is_mouse_right_pressed: bool = false
# --- Variables de control para los cooldowns (TIEMPOS DE RECARGA PERSONALIZADOS) ---
# Cooldown para el botón izquierdo del ratón
var left_mouse_fire_cooldown: float = 1.9
# Cooldown para el botón derecho del ratón
var right_mouse_fire_cooldown: float = 0.4
# Cooldown para la acción "PATADAMEDIA" (Tecla R)
var patadamedia_fire_cooldown: float = 1.7
# Banderas para controlar si cada acción puede disparar (está fuera de cooldown)
var can_fire_left_mouse: bool = true
var can_fire_right_mouse: bool = true
var can_fire_patadamedia: bool = true # Para la tecla 'R'
# --- Nodos Timer (creados y gestionados en _ready) ---
var left_mouse_timer: Timer
var right_mouse_timer: Timer
var patadamedia_timer: Timer
func _ready() -> void:
# --- Inicialización de temporizadores para los botones del ratón ---
# Temporizador para el botón izquierdo del ratón
left_mouse_timer = Timer.new()
add_child(left_mouse_timer)
left_mouse_timer.wait_time = left_mouse_fire_cooldown # ¡Ahora usa su propio cooldown!
left_mouse_timer.one_shot = true
left_mouse_timer.timeout.connect(func(): can_fire_left_mouse = true) # Resetea el cooldown
# Temporizador para el botón derecho del ratón
right_mouse_timer = Timer.new()
add_child(right_mouse_timer)
right_mouse_timer.wait_time = right_mouse_fire_cooldown # ¡Ahora usa su propio cooldown!
right_mouse_timer.one_shot = true
right_mouse_timer.timeout.connect(func(): can_fire_right_mouse = true) # Resetea el cooldown
# --- Inicialización del temporizador para la acción 'PATADAMEDIA' (Tecla R) ---
patadamedia_timer = Timer.new()
add_child(patadamedia_timer)
patadamedia_timer.wait_time = patadamedia_fire_cooldown # ¡Ahora usa su propio cooldown!
patadamedia_timer.one_shot = true
patadamedia_timer.timeout.connect(func(): can_fire_patadamedia = true) # Resetea el cooldown
func _input(event: InputEvent) -> void:
# --- Lógica para actualizar el estado de los botones del ratón (rápida y sin awaits) ---
if event is InputEventMouseButton:
# Botón Izquierdo
if event.button_index == MOUSE_BUTTON_LEFT:
is_mouse_left_pressed = event.pressed # True si se presiona, False si se suelta
# Botón Derecho
if event.button_index == MOUSE_BUTTON_RIGHT:
is_mouse_right_pressed = event.pressed # True si se presiona, False si se suelta
# La tecla "R" (PATADAMEDIA) no necesita await aquí.
# Su lógica de instanciación se gestiona completamente en _process.
func _process(delta: float) -> void:
# --- Lógica de Disparo/Instanciación para el Botón Izquierdo del Ratón ---
if is_mouse_left_pressed and can_fire_left_mouse:
can_fire_left_mouse = false # Pone el cooldown
instantiate_bullet() # Llama a la función unificada de instanciación
left_mouse_timer.start() # Inicia el temporizador de cooldown
# --- Lógica de Disparo/Instanciación para el Botón Derecho del Ratón ---
if is_mouse_right_pressed and can_fire_right_mouse:
can_fire_right_mouse = false # Pone el cooldown
instantiate_bullet() # Llama a la función unificada de instanciación
right_mouse_timer.start() # Inicia el temporizador de cooldown
# --- Lógica de Disparo/Instanciación para la acción "PATADAMEDIA" (Tecla R) ---
if Input.is_action_pressed("PATADAMEDIA") and can_fire_patadamedia:
can_fire_patadamedia = false # Pone el cooldown
instantiate_bullet() # Llama a la función unificada de instanciación
patadamedia_timer.start() # Inicia el temporizador de cooldown
# --- Función unificada para instanciar la bala ---
func instantiate_bullet() -> void:
var bullet = Bullet.instantiate()
# Aquí podrías ajustar la posición de la bala si es necesario,
# por ejemplo: bullet.global_transform.origin = global_transform.origin + Vector3(0, 0, -2)
add_child(bullet)