How to deal with mouse events enable/disable and cursor

Get help using Construct 2

Post » Thu Jun 29, 2017 3:38 pm

I suppose this is a strange question but this happens to me all the time. I make education games for charter schools online programs.
All my games are set up the same basic way:

1- intro screen with a button to go to an help screen/layout
2- a helpscreen before game that goes to the game screen/layout
3- the game screen that contains 3 buttons - help, reset, and music. as well as other navigation buttons depending on the game.

All buttons are made in a family for which I set the mouse cursor to hand on mouse over.

Now when the user clicks on the help button, the help screen copy now on the HUD layer slides in.

My problem is that even if I disable the buttons by disabling groups, there is still the problem of having the button cursors showing through which is a no-no. I have tried to move out buttons off the screen but sometimes it is very difficult when there are lots of elements with hand cursor.

Is there another way I should approach this which is always happening in all the games?
B
8
S
1
Posts: 86
Reputation: 618

Post » Fri Jun 30, 2017 4:28 am

Set some kind of toggle variable condition so that when the help is open, the mouseover event doesnt work. So wherever the mouseover change event is, add if helpOpen=0 or something. When you open the help, set helpOpen to 1. This will mean the mouseover change to a hand won't work when the help is open.
B
46
S
16
G
79
Posts: 2,170
Reputation: 46,857

Post » Fri Jun 30, 2017 5:01 am

@resdesign

there are a couple ways you could do it.

If the help screen doesn't have a button that needs the pointer to change to the hand, then put the event that changes the cursor to the hand inside the group that you disable - so you effectively disable the buttons and disable changing the cursor at the same time. When you re-enable the group, you will enable the cursor to change again too.

If you want to disable some buttons, but still have others work (and have the cursor change), then you could add a boolean instance variable to the family called "ButtonEnabled". Set the variable to False for all the buttons you want to disable, and leave it True for the rest.
On the event that changes the cursor (when the mouse is over a member of the button family) add another condition that says "ButtonFamily is ButtonEnabled"

If you have lots of buttons in different groups, you could add another family instance variable called ButtonGroup. Then you could have a "Navigation" group, "Help" group, "Settings" group, "controls" group, etc... Then it would be easy to select and disable/enable an entire group as needed.
B
98
S
34
G
20
Posts: 438
Reputation: 17,815

Post » Fri Jun 30, 2017 5:22 pm

Thank you guys for your answers and yes the solution is to use families and instance variables. Diego, a friend gave me the idea of using instance variables. Below is the description of the example. Not sure what this forum system is to post examples. Let me know and I can post it.

Example:

Set up:

The stage has the following elements:

    musicBtn - code toggles music and changed the frame image of the button
    resetBtn - code resets the layout
    helpBtn - code sets the Y of the help screen to 0

family is called pointables - the instance variable is cursorStyle = 1

Above the stage and therefore hidden are:
help screen
closeBtn - the button is pinned to the help screen - the instance variable is cursorStyle = 1

Code:
1- if mouse is over over pointables and pointables instance variable is 1 then set cursor to hand
2- if mouse is NOT over pointables then set cursor to normal - set closeBtn instance variable cursorType = 1
3- helpBtn click event - set pointabled instance variable cursorType = 0 - set help screen Y = 0 set MUSIC BUTTON group Deactivated set RESET BUTTON group Deactivated
4- closeBtn - set help screen Y = -500 - set pointables cursorType = 1 set MUSIC BUTTON group Activated - set RESET BUTTON group Activated

So with lots of buttons it is more complicated but you get the idea. There is also the idea to add global variables to set and reset the instance variables.
B
8
S
1
Posts: 86
Reputation: 618

Post » Fri Jun 30, 2017 5:26 pm

@AllanR
Your response is great too. I will try to implement your answer sometime soon and see how it works. But just reading it seems very promising.
B
8
S
1
Posts: 86
Reputation: 618


Return to How do I....?

Who is online

Users browsing this forum: jatin1726 and 30 guests