Improving GDevelop usability

Didn’t Understand any tutorial…

My (5 cents) suggestions:
Copy and paste more then one activities without moltiplicate (ex.select 2 acivities, CTRL C and with CTRV V I will create 2 new lines and not four)

Manage object hierarchy in GUI ( ex to manage different part of a body you create the head and put below the other parts). A lot of game engine do it.

Reduce the object dimension in the GUI. If you have a lot of object it’s difficult to manage them in the Interface.

More Javascript documentation

Possibility to copy the code and paste as written code (it should help us in the forum.It’s not simply manage the images)

sou do brasil e devo avisar que estou amando o Gdevelop,pois meu jogo esta ficando menos de 10megas,enquanto que o mesmo jogo no gamemaker e UNITY chega a 30megas ou pouco mais,e as vezes fica 20 megas deixando qualquer pessoa confusa de porque ser muito mega se minhas sprites nem chega a 10megas ,então quando eu tive a sorte de descobrir esta maravilha de engine Gdevelop fiquei satisfeito em recriar meu jogo nele e testar em android e pra minha surpresa e satisfação fica menos de 10 megas,só que a unica coisa que eu não gostei foi que apenas compila para android versão 5 e superiores,e não em androids inferiores como acontece no Gamemaker e Unity,pois meus jogos são voltados para celulares de todo tipo de publico alvo desde inferiores ao superior(atual),ou seja do android 2.3 ao atual. eu fiquei decepcionado com o Gdevelop apenas por causa disso pois eu havia criado quase todo meu jogo e ao testar em meu celular android 4 e não abre eu pensava ser erros meus ao criar o jogo,mas quando testei no android 5.1 do meu irmão o jogo foi sem problemas , e parabens pela humildade de querer sempre saber pelos usuarios desta engine oque melhorar e adicionar ao Gdevelop para sempre ficar melhor.

@Reginaldo Thanks for your kind word but please write messages in English on this forum - also your message is not in the proper category. Better post this in an Introduce Yourself thread. Thanks! :slight_smile:

thanks for replying, but i’m writing here because you ask gedevelop for suggestions to improve, so my only problem is that it doesn’t compile for android below android5.

Unfortunately Android 4 support will be less and less guaranteed. It comes as a “best effort” basis for now :confused:

got it, but how could i compile from android 4?

[size=130]Documentation[/size]
I am not new to programming however I just stumbled over GDevelop. It is surprisingly complete for it’s use case to create little games including shipping them to various platforms. Well done!

As a new developer on GDevelop I see some issues with the documentation. There are lots of functions available, but they are documented by just listing their existence. What is the purpose of the functions? Do I really have to assume that from just the function name? (well, often that works but more often than not it does not).

Also, even if the purpose of the function is known (i.e. set the Angle), what is the data type for the function? String, Boolean, Int or Float? And finally, what is the unit? Is the angle given in degrees, or in radians?

[size=130]Alternative would be to make the documentation more type safe[/size]
While type safety is standard in some programming languages I know that some other languages advertize dynamic typing. Still then not every function will not work with any datatype, and not documenting that can create grey areas that are flaky to debug.

[size=130]Some remarks[/size]
Obviously, as a new user I have questions but I’d need someone experienced to give answers.

Edit: Just now I am reading some more of the documentation, like
http://wiki.compilgames.net/doku.php/gdevelop5/tutorials/basic-game-making-concepts
This is one of the things that I was missing…

[size=130]Examples are simple, partly too simple[/size]
I am trying to create a game where enemies need to have an internal state. That is easily achieved with instance variables, so far so good. However based on that status I want enemies to move differently, or be differently animated, and to behave differently.

Currently I do not see examples that cover switching of animations, or events that check both if a key is pressed AND the internal state of the player/enemy would match.

[size=130]Extend collection of examples[/size]
There are answers and solutions out there but they need to be collected so someone can look them up in one place.

[size=130]Some remarks[/size]
Googe finds lots but there is no ranking whether it is a good, bad or outdated solution. Sometimes it is hard just to find out the function name has changed.

[size=130]In Events or Actions I am unsure how to write expressions[/size]
Coming from other programming languages I understand the concept of classes and instances/objects. It is strange that in GDevelop I would write an event to be triggered if Player collides with Enemy - these are class names as I understand it. Especially when there are many enemies. So once the event applies, in the action I reference the Player and the Enemy. What happens if two enemies collide? How would I reference the one and the other Enemy object?

[size=130]Tell me if you have some ideas or alternatives[/size]
This would typically be resolved with prefixes, like enemy1.Angle() or enemy2.Angle(). It could also be resolved by assigning names, just as in a for loop. With GDevelop I am just not sure when to use which prefix, or when to use which expression inside. I realized the graphical editor is a great help but then in special cases it just leaves me in the dark.

[size=130]Some remarks[/size]
The graphical editor is a really great achievement. However I learned it has it’s limitations. If the functionality were explained I would not have to play and learn where it succeeds or fails. Plus if the object model of GDevelop were explained, I would not have to guess either.

Maybe some of the answers come when I start reading the generated HTML5 code - however so far I wanted to stay on user level…

By functions you mean all instructions (conditions/actions) ? These are not listed on the documentation. There is only the method for write the expressions.
Type and descriptions are generated from the engine.
See here for all expressions.

This is in the description of the input. image
If you see only “Angle” tell me for which instruction i can add the type like on my screenshoot.
In general all value are in pixels, degree, and colors use this format “255;255;255”.
There is no booleans or arrays. boolean can be replaced by 0 or 1 or “true” “false”. Arrays by variable structure.

In the eventsheet when you have an action for an object, consider “object” like “all instances of object”
If you wish select a particular instance you need give a unique instance variable on your instance on the scene editor. and use this variable in condition for filter the instances.

If two instance of your object “player” are on scene and two intance of you objet “wall”. And we have an action for change the animation of “player”
Then each instances of player in collision with wall will change their animation.
Imagine an loop for each on instances when you apply the actions.
If one instance player don’t touch the wall, the contition isn’t validate for this instance and the instane isn’t pass to the actions.

I recommend you to test in the engine you will understand faster how it’s works :slight_smile:
Indeed a script working for one instance can be not works for multiple instance.

I think you made an error thinking the documentation is integrated, because most of the GDevelop documentation is just on the wiki.

All actions, conditions and expressions are functions. If you mean Expressions only (I’m guessing because they are the less documented in IDE), please try to use the correct terms :wink:.
Those are documented in the list of all expressions on the wiki.

It is often clear from the instructions description/title and the argument name. The current GDevelop is on top of JavaScript so no differenciation between float and integer. Boolean are not implemented (there is a GSoC project for implementing arrays and Booleans tho), like Arrays but both can be emulated, the first through a variable with 0 and 1 and the Array through a structure, and to loop over it updated length and an external current item variable.

If you type an expression from the wrong type as argument it obviously won’t work, but if you type a string instead of a variable or something like that you get a big red text entry and a description of the error below.

Ok let me explain it to you then :slight_smile:
Every actions more or less conpiled into this (pseudocode):

var List = GettingListOfAllInstancesOfObjectsOnTheScene()
List.filter(condition1) // Removes every object having the conditions function not returning true
List.filter(condition2, arguments)
Etc...
If Not list.length = 0 {
    action1(list.getObjectOfType(argument1))
    action2(6)
} EndIf

This is pretty much how object selection works. This is also explained on the wiki I think.

I don’t know what examples you are talking about but I find the built in examples very complete already. Maybe not for the specific thing you want to do but they cover a bit of everything e en advanced stuff like using JS to screenshot and replace the frame of a sprite with that screenshot. Doesn’t seem “too simple” to me :thinking:.

Well, I personally don’t have any kinds of problems like that. Can you be a bit more precise about the problem description please? :slight_smile:

This generated code is messy you would just get more confused. Also, it is Js code not html5 :wink:. Html5 is a markup language standard not programming a language.

Hey @hiran thanks for your feedbacks :slight_smile:

Just want to add that while “functions” arguments (string, numbers, etc…) in expressions are internally well defined, they are indeed hard for most users to discover - despite the button to browse them.
This will hopefully be easier to discover with the new “auto-completion” feature that is coming in next version (I hope as a testing version in the next days): https://twitter.com/GDevelopApp/status/1246840565708308481

I think we should also produce more tutorials about how “advanced” object selection can work :slight_smile:

Thank you for that explanation. Yes, it seems these conditions work a bit differently than I thought in the beginning. There is still a twist in my brain as I believe there are situations hard to resolve.

Alltogether I am pretty impressed as of how much GDevelop already can do. :slight_smile:

About the prefix I am missing:
It seems in conditions I choose objects (which I read as “class” from other programming languages). Evidence is when I drag one object multiple times to a scene I get numbered instances.
Now in the action that I write I just refer to the object again, which does not mean any specific of them. And then all of them would behave similar and do whatever the action is.

What if I just want one of the selected? Or the other? Or would this be a wrong concept on my side?

E.g. I create a two-player game. The two player characters behave so equal I want them to be two instances of one object. Now when the left gamepad is used I want to activate one of the player instances, while for the right gamepad I want to activate the other. How does this work if all I can do is
“if gamepad 1 button A is pressed” → “start moving player”

I already answered you on instance selection.

Only the instances for Wich the condition is true gets affected by the actions. If you want to select one specific instance with your example with gamepads, you just need to add for each instance an ID variable and check if ID variable === the id you want.

@arthuro555 I don’t think it’s super productive to be showing pseudo code, at least to new users :slight_smile: The events sheet should be understandable without having to show pseudo code.

Please rather post a link to the wiki article explaining this.

Arthuro555 is right that the solution is to differentiate your instances. How to do that? Add a variable “Player Number” or something like this. Then use it in your events.

Another solution is to use actually two different objects (i.e: two “classes”) but then to put them in a same group of objects. You can then create most of your events by refering to the group of objects (meaning that events will apply to both objects) and have some events only for one object or the other.

But if your want to do a player selection, the solution is to assign a variable with a different value to your objects.
Then use a condition checking for this variable. For example:

Conditions:
* Left key is pressed
* Variable Player of MyObject = 1

Actions:
* Move MyObject 

Will move only the “MyObject” that was assigned to Player 1.

Thank you both 4ian and arthuro555.

I think I am getting the way this engine works. Differently than I expected in the beginning but it can be handled. After all this also helped me understand the power of the JavaScript event when giving commands to the browser

In that thread I started writing pseudo code myself. :wink:

So I have had some more exposure to gdevelop and I tried adding sounds and music.

The first time my sounds should play they are all delayed, which is kind of annoying. Following Audio [GDevelop wiki] I played them at the beginning of the scene with zero volume but in my case it did not help.

Even more strange for music, when I started the play in the scene initialize event, I never heard the music. I tested back and forth, all the other sounds were available but the music. Until I realized there is this setting to stop all audio when the scene starts up. Here’s the catch:

Why does the scene initializer run before all sounds are stopped? If there is a reason for this please add it to the documentation. Otherwise it might be easier for users if audio were stopped before the scene initializer runs. One less pitfall to hit.

This could nicely fill the empty bar


Each button triggers a dropdown menu.
The names could collapse for smaller screens.

2 Likes

I think it would be much helpful if we have an action which could disable the previous action.