10 Replies
Tommi Ojala

I think that problem is that you have put the "Show layer X" -trigger on the Layer X itself. Those need to be on the base layer.

What you have is done is basicly this: "Use there keys to open this locked door", but you have put the keys behind that locked door.

One other idea too:

There is no need for the additional layer to have every object of the base layer copied there. a layer can just have some objects in it, and rest can shown from the base layer "through" the additional layer. In this case the additional layers could just be those answer boxes, and everything else could be shown from the base layer.

In your case each additional layer contains new set of buttons that appear on top of base layer buttons, and you would need to then make a complete set of triggers for every layer in order for those buttons work in each layer. That just seems too much of needless work.

Tommi Ojala

One further thing to think about:

If you add the missing triggers that go like "Set Question 1 to Value True if user clicks Question 1", then that True/False trigger will change from the default value of False to True, but it will stay True, unless there is some other trigger that makes change to False again.

So if the user clicks first Question 1, and then changes their mind, and clicks Question 2, and then one the characters, now both Question 1 and Question 2 variables are True, so two different layers fulfill the requirements. And first one in order is the one the gets done, and not the rest, as we already jumped to a different place.

So if you have triggers in following order and both X and Y are true:

Show Layer A if X is True

Show Layer B if Y is True

Then it will go to Layer A.

 

But if triggers are like this:

Show Layer B if Y is True

Show Layer A if X is True

Then it will go to Layer B

 

So in order to make this work with True/False triggers you will need make sure that the Question 1 box has a trigger that makes Question 1 variable True, but also the other two False.

But personally I would not do this True/False triggers at all, I would use a number variable instead. It could start as "0" and then with a trigger change to 1 of Question 1 is clicked, chance to 2 if Question 2 is clicked and so on. This automatically makes sure that when one option is selected, the others are deselected without need for new triggers.

And then use that number variables value as "If" condition for other triggers

Tommi Ojala

Here is what I had in mind:

Set up two number variables: "Question" and "Character". Both can start as 0.

Then make triggers that change the Question value to 1 if user clicks Question 1 box. And to value 2 if user clicks Question 2 box. Same triggers for Character.

Then the Q1C1-layer trigger would be to different triggers, so user can click either character or question first.

First trigger (Character is last one clicked):

Show layer Q1C1

When variable Character changes

If Question = value 1

and Character = value 1

Second rigger (Question is last one clicked):

Show layer Q1C1

When variable Question changes

If Question = value 1

and Character = value 1

 

Then make all possible combinations of that. I only made Q1 or Q2 to work with C1 and C2 for now, but the reference fields show that the other number variable values are there too.

As a final step I would delete all other objects from the additional layers than the text box, because that is all that changes. That way the main layer buttons will always remain clickable.

The point of all that was to make this so that the user can cycle through all the combinations if they like. So they make selections and see a layer, but after that can change their choices and see other layers too.  

Walt Hamilton

Tommi,

You said:

So if you have triggers in following order and both X and Y are true:

Show Layer A if X is True

Show Layer B if Y is True

Then it will go to Layer A.

 

But if triggers are like this:

Show Layer B if Y is True

Show Layer A if X is True

Then it will go to Layer B

Just to clarify just a bit. If these triggers are set up on one slide base, they will both be executed. If they are jumping to another slide, only the first is executed. Technically, they show a layer, but they do not go to it. So the system is still on the same slide, and trigger execution continues. In this case, the first layer will be shown, then the second. If the second is set to close all other layers, it will be the only one showing. If it is not, then both layers will be showing, with the second on top.

Walt Hamilton

Try the New Version.

I mean this kindly, but in your work, you would have a lot more time to experiment with things, and learn how they work, if you would change one habit. I had to delete all the layers and start over, because everything was on every layer. Look carefully at the New Version. The only things on the layers are the things that change. You take everything you can touch with your cursor, and  copy it onto every layer, and that takes a lot of time and effort. I don't mind; perhaps you have the time and energy. The problem is that having so many duplicates in so many places confuses you, confuses somebody who may come after you and have to maintain the project, and worst of all, it confuses the system. If you want (for example) to change the state of one of the characters, it's easy if they appear in only one place. But it is a lot of work to make that exact same change on every layer.

Think of layers this way: They are transparent pieces of material that you can lay (hence the name layer) on top of the base to show something different.  I know in the past you have had problems with sliders and dials because you put a copy on every layer. You will be happier if you adjust your workflow to strive for economy (don't spend time creating things you don't need.)

I also did it without variables. Variables are useful to keep track of something that happens on a different slide. In this case everything happens on one slide, so it is easy to check the state of objects. Variables would be used (for example) if you wanted the learner to choose one of the characters, then use that character of different slides. The variable would make sure the program remembered which character to show.

Here's a little story that might help you understand the use of variables.

I got home last night, and the cat insisted he had not been fed all day, and was STARVING. I hadn't been there all day, so I didn't know, and my wife was off to her quilting party, so I couldn't ask her. Fortunately, she left a sticky note on the counter that said "I fed the cat", so I knew not to feed him again.
 
The note she left me is the variable. I couldn't see her feed the cat, but I could see the note and know what went on while I was gone. Storyline is just like I was. One slide has no way of knowing what happens on another slide, but it can read a message left for it in a variable, and know what the learner did on another slide, provided you, the developer, used those actions on that other slide to change the contents of a variable.
 
The cat got pretty insistent, so I gave him a snack, crossed out her message, and wrote, "He's also had a bedtime snack", and went to my meeting.
 
The note is the variable. Everybody can see it, and it never changes unless you, the developer, create a trigger to change it.
 
My wife is getting older (I'm not, just she), and takes a bunch of medicines. She puts them in one of those little plastic gadgets with seven boxes. Every night, (if she remembers :) ) she looks in the box for that day. If it is empty, she knows she has taken her pills that day.
 
The pill box is the variable. She can't always remember everything, but if the box has pills in it, she knows to take them. 
 
Variables are designed to be seen everywhere, but not heard (much like small children of a previous generation).  SL cannot multi-task, so only one slide at a time can be active. SL has no memory, so when a slide  becomes active, it can't know what went on while it was hibernating. That's why variables were invented.  Each slide can look at the note (variable) and by seeing what is on there now, it can know what went on somewhere else, or some other time. I couldn't hear my wife write the note, but I can read it and know what went on at home while I was not there.
 
Variable aren't actual things, nor parts of your project, just like the pillbox isn't part of my wife's medicine. They are just post-it notes to carry information from one part of the project to another, and are most useful in trigger conditions.
 

See if the New Version does what you want. Any questions about how it works, ask.