Godot #HO | Información General

B

#419 Buah, pues según ese benchmark la diferencia es sustancial. Lo que no entiendo el porque xdd

1 respuesta
Jastro

#420 lo se, pero es para dar un ejemplo xD
#421 sustancial, igualmente 10k++ de bunnys no son "sustanciales". si lo comparas con c# comparalo con c++ y lloras

GDScript (Release) 	18560
C#/Mono 	27555

GDScript (Release) 	20540
C#/Mono 	36720

GDScript (Release) 	17639
C#/Mono 	37455

llamame loco, pero de sustancial poco.

1 1 respuesta
B

#422 Con sustancial me refería a que es una diferencia notable. Y me refería a la diferencia entre GDScript y C# Ya si nos vamos a C++ es que dobla el rendimiento de GDScript.

Pero sigo sin entender el porque :S

EDIT: Me he ido a stackoverflow academy y he encontrado esto: https://stackoverflow.com/questions/29903320/why-is-my-computation-so-much-faster-in-c-sharp-than-python

Que tal vez aplica a mi duda sobre rendimiento entre Mono C# y GDscript

1 respuesta
AikonCWD

#423 El rendimiento se te va cuando el código ha de ser interpretado, ejecutado por una VM o código que "corre por si solo".

A nivel de rendimiento, un código interpretado (gdscript, python, etc...) es de lo más lento. Luego tienes códigos que corren en diferentes VMs, como por ejemplo java o C# (un mismo source de java o C# podría ser multiplataforma si se ejecuta en otra VM). Y finalmente tienes código que tras ser compilado, sus instrucciones son ejecutadas por la CPU, sin intervención de eun intérprete o VM. Por ejemplo ASM, C, C++, etc...

Una instrucción en python tiene que ser interpretada por la VM y luego traducida a instrucciones que la propia CPU pueda ejecutar. Eso es lento de cojones.

Un código en C se compila y sus instrucciones pueden ser ejecutadas por la CPU directamente (no es exactamente así, pero no quiero enrollarme mucho...). Eso es rápido de cojones.

A más bajo nivel, más eficiencia obtienes. Por eso la peña puede hacer demos de 90kb en ASM y generar un videojuego en 3d, con multiples texturas y sonidos.

1 1 respuesta
B

#424 Si, lo de que a más bajo nivel mejor rendimiento es de cajón. Mi duda era entre GDScript y C# y por lo visto según he leído en el link que he puesto arriba es por lo del Just in Time compiler.

1 respuesta
Ridote

A mí me molaría probar nim y gdnative, le estoy dando caña a nim y mola bastante

1 respuesta
Leos

#426 Ggdnative es c++ no?

1 respuesta
Jastro

#425 C++ y C# interactuarán de manera nativa con el motor que la que te programado (tiene pinta de C++).

Si usas GDScript, este lenguaje pasará por una VM que lo interpretará como C++/C#

ese paso intermedio es lo que genera esa ralentización, basicamente es como con los emuladores

1
B

Aclarado! Grazie!

AikonCWD

#427 https://godotengine.org/article/dlscript-here

Me lo miraré por los loles. Pero es que me gusta tanto python a nivel de sintaxis que por el momento no me planteo cambiar.
Y menos si hacemos (al menos yo) juegos de mierda que podrían correr igual de bien bajo una macro dentro de un Powerpoint xd.

1 1 respuesta
Leos

#430 Pero es que sobre gdnative hay 0 documentación...

B

Encontrado en una búsqueda rápida: Generando terrenos (arrays 3D)

Leos

Confirmo que si lo abres como workspace en visual studio code te autocompleta! @gdev

1
Ridote

Por si alguno no está en el grupo de Godot, está ya la alpha 3, https://godotengine.org/article/dev-snapshot-godot-3-2-alpha-3

2
Beelzenef

¿qué estructura de directorio usáis?

En la GodotCon propusieron la siguiente, pero me parece poco específica y poco ordenada:

root
--_ assets
-----_ art
-----_ fonts
--_ src
-----_ autoload
-----_ hud
--_ todo lo demás

pensando en mejorarla, pero nunca sé si colocar escena + script juntos, o los scripts en otra parte... quizás necesito consejo

¿separais escenas de scripts? ¿directorios para items, enemigos, edificios...?

2 respuestas
Ridote

#435 A mí me mola incrustar los scripts en las escenas pero con eso olvídate de herencia :D

En cuanto a cómo suelo organizarlo, depende, pero suele ser algo tipo lo que has puesto pero separando también mapas

Leos

#435 yo siempre pongo los scripts en la carpeta scripts, las escenas en la carpeta scenes, y en assets los assets xD

1 respuesta
Kalgator

#437 hola hermano de estructura

1
B

Tengo una scene Player me gustaría hacer dos jugadores cambiando el color de la camiseta, se me ocurren dos opciones:

  • Hago una variable tipo (left o right) depende de para donde mire y en base a condicionales le digo si mira a un lado o a otro, si usa unas teclas u otras y si usa una animación con la ropa de un color u otro.
  • Hago dos clases Player diferentes con las cosas que comentaba antes.
1 respuesta
Ridote

#439 Yo lo que haría sería un mismo Player y hacer animaciones diferentes. Si usas un spritesheet, con un animation player podrías usar animaciones diferentes e incluso dándole un valor de este es el player tal o cual, usar diferentes input del teclado

1 respuesta
B

#440 Al final lo hago con valores fijos pudiendo seleccionarlos desde el panel del elemento:

export(String, "right", "left") var type

func _ready():
	$AnimatedSprite.animation = type

Es más. pensandolo ahora según escribo esto creo que lo haré con constantes.

Edit: meh, no admite variables en el export range

Ridote
B

A ver si me podeis echar un cable porque me he atascado con una cosa.


Tengo una serie de CollisionShape para suelo, techo y paredes.


Además al hacer click en un botón mando una señal para instanciar una Ball, depende del turno que sea en una posición u otra.

¿Como puedo detectar que colisiona con el suelo? Con el resto de elementos me da igual.

1 respuesta
Ridote

#443 Tus players son kinematic, no? ¿Cómo los mueves?

Edit:
Si es con move and slide usa esto:
int get_slide_count ( ) const
KinematicCollision get_slide_collision ( int slide_idx )

Si es con move and collide usa lo que te devuelve la función, creo que le tienes que hacer un get_collider()

2 respuestas
B

#444

2 respuestas
Kalgator

#445 para que muestras el player?

Si lo que quieres es que un kinematic detecte el suelo, existe la funcion is_on_floor()

1 respuesta
Ridote

#445 Vale, con get_slide_count te da el número de colisiones. Iteras sobre las colisiones que haya, que bien pueden ser 0, y miras a ver si es el objeto que te interesa y haces lo que quieras con él. Una forma fácil de separar funcionalidades es usando grupos. Por ejemplo, en _ready de la pelota le dices:

add_to_group("pelota")

Y cuando estás viendo las colisiones compruebas si está en el grupo pelota y si no pues no haces nada :)

Ridote

¿Como puedo detectar que colisiona con el suelo?

Ay lmao, creía que querías comprobar cuando pega a la pelota!!!

B

#444 #446 Lo que pasa que no es con el Player con quien quiero la detección si no con Ball que es RigidBody2D.

Osea, la colisión seria Ball RigidBody2D contra un CollisionShape2D en concreto llamado Ground.

Ya me parecía raro que preguntarás por el Player xD

2 respuestas
Ridote

#449 Hmmmm, los rigids tienen una propiedad para decir cuántas colisiones a la vez puedes detectar. Está en el editor, igual la tienes a 0, que creo que por defecto está a 0. No significa que no colisione, pero no hace el trigger del evento.