Improving GDevelop usability

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.

hi im a little lazy so i didnt copy the text and … in here
a few days ago i creat a topic about the things that they can be in gdvelop and some bugs i think i will put the link of the topic down here to just be sure that u will see it :slightly_smiling_face:
you can read the FEATURE and BUG

1 Like

Please consider adding multiple selection to the object list, so more than one object can be copypasted at a time :slight_smile:

1 Like

Hello,
I am a frequent Gdevelop user and i think its a great app but i kind of have a little problem…
Whenever i open an interface such as the editor for animation, I tend to setup all the various character actions such as idle, jump, fall etc. all at once including hit boxes and points so that i wont have to do them one at a time…During this process if I accidentally click outside the window it closes and I loose all work done and I have to start all over, due to this little issue i have had to change my timetable several times… It will be nice if one of the future updates would have a way to fix this issue Thank You…
P.S this issue applies to all other interfaces too

4 Likes

But I sometimes use this to exit quickly and dismiss the changes. So, what is an issue for you is a feature for me.

We might need some “smart” way of checking if some work was done in the dialog, and add a confirmation dialog if that’s the case?

5 Likes

I agree with this. I lost so much time due to this.
In the animation window and more so in the global variable window (mostly by missing the scrollbar down). I use the scrollbar because I have lots of Gvars and the wheel is annoingly slow

This idea have been discuss a while ago… (a year or more)

The thing for that you call a fix is a feature.

Confirmation dialog boxes break the immersion and fluidity in the application.
The edit window is already a dialog box… add a confirmation over another one, it looks like a habit from 15 years ago on a bad OS.

If you miss click you have to be more precise with your mouse and all change need to be done with your complete attention relative to what you trying to do.

The mousewheel allow to scroll in you list.
About the scollbar:
The scrollbar is moreover an element that becomes more and more useless, it remains and must always be visible to indicate a large area to scroll.
But its manual use is almost obsolete. Even more so with the age of touch.
The only people I see still using the scrollbar with the mouse are people 40 years old and older.
Your mouse has a scroll wheel, your keyboard has PageUp/PageDown

The fast iterating is a great thing, i’am not agree for destroy it because some users are not attentive.

As @Gruk said this is a feature, and this is the best thing to avoid a confirmation box and a great point for fast iteration.

A confirmation box is fine only when an action of the software is unrecoverable.
Like converting an object to a global object, same for groups, and when you want to close the application.

1 Like

Hmmm…I would say losing any/all changes to a sprite or another object is something I consider unrecoverable. Especially because many sub-windows are larger than their parent windows. (e.g. Piskel is much wider than the sprite object window, so if you accidentally double click save and close the piskel window, it could be picked up as clicking outside of the sprite object window).

I wonder if there could be an IDE option for “Request confirmaiton when clicking outside of a window to close” (disabled by default).

I know I’d use it.

4 Likes

Remapping the exit command to right click would satisfy both groups I assume

Something I’ve noticed is that the collisions editor isn’t very user friendly (for me at least). It’s hard to work with and I think it would be a lot easier to use if there was an option for a dynamic collision mask (not counting empty pixels as collisions), which would make it a lot easier for beginners to make platformer maps use a lot less objects which could improve performance for some users.

Just noticed this thread, accidentally posted it in another thread.

In the “find and replace” function, it works fine except for replacing whatever object is specified in "For Each Object.