This article is written as an answer to a question on the forums: Drag&Drop with Advanced Action
For quiz slides it is possible to show different Failure messages based on the attempt number. That functionality is not available for Drag&Drop slides. As you can read in the thread, another user posted a solution using the Object actions which are executed after each drag action. I posted some comments about the limitations of that solution. In this article the described solution is similar to what happens on other KC slides: the failure messages will appear after clicking the (default) Submit button. This work flow is only valid for Knowledge Check slides, which was the goal of the user on the forum. As you can read in one of my former blog posts, a D&D slide which is not scored, is reset automatically when leaving the slide. This functionality is used here. I used the InBuilt states for the drop target, as described in this post.
You can watch the result, an interactive movie, on my blog, Feedback depending on attempt for D&D
The cptx-file has 4 slides: Title slide, a dummy slide (see below), the Drag&Drop slide and End slide.
Setup Drag&Drop Slide
The Drag&Drop slide’s Timeline looks like this screenshot:
From Bottom to Top you find these object timelines:
- DragOne, DragTwo and DragThree which are the 3 Drag sources. Those objects have only one extra InBuilt state: the transparent DragOver State. D&D is set up so that the drag sources disappear behind the drop target.
- DropContainer which is the unique Drop Target. It has 3 states as you see in this State panel
- Text Tx_Question which has the Question
- Gr_Feedback with several objects; the whole group is hidden in Output
- I_Fail and I_Success are the two sticky images
- Shape button SB_Continue with a pausing point at 2 secs, which is later than the (default) pause of the D&D (1,5secs)
- FB_One, FB_Two and FB_Three are the failure feedback messages for the 3 possible failures. The first two have an inserted variable v_attempt.
You don’t see a Success feedback on the timeline, because I kept the default Success message for the D&D slide (unchecked the Failure message); That Success message has just be styled (freeform shape).
The D&D panel, tab Actions has been set up as visible in this screenshot. Although the user provides 3 attempts, you see that I set the attempts to 1 in this panel:
Variable, Events and Actions
I used only one variable: v_attempt, with a starting value of 3. If you want to have more attempts than 3, just change that starting value. You can see its value in the example movie, center of the bottom bar. That variable is also inserted in the first two Failure messages.
SubmitAct, triggered by the Failure event of the D&D (see panel above)
This conditional action has 4 decisions, can easily be edited to have more than 3 attempts
- Decision ‘Always‘ is a mimicked standard action, decrements the value of v_attempt by 1
- Decision ‘First‘ checks if v_attempt is equal to 2, which means the first attempt (because the original value has been decremented in the first decision). If that is the case 3 objects out of the feedback group are shown: the first feedback message (FB_One), the image I_Fail and the continue button SB_Continue
- Decision ‘Second‘ checks if v_attempt is equal to 1, which means the second attempt. The actions are identical to ‘First’, with the exception of the feedback message (now FB_Two)
- Decision ‘Third‘ checks if v_attempt is equal to 0, which means the third and last attempt. It has similar actions to the previous two decisions.
Here is a screenshot of the complete action:
SuccessAct, triggered by the Success event of the D&D (see panel above)
ContAct, triggered by the Success event of the Continue button
Here is the ‘trick’! After each attempt I want the D&D slide to reset automatically. This is only possible when you leave and re-enter the slide. To achieve this, I used a similar (but easier) approach as explained in the blog post ReplaySlide. I inserted a dummy slide before the D&D slide, with a very short duration (0,1secs). Have a look at the script triggered by the Continue button, which is a one-decision conditional action:
When there are attempts left (v_attempt > 0), these commands are executed:
Expression cpCmndGotoSlide = cpInfoCurrentSlide – 2
The first system variable cpCmndGotoSlide has an index starting with 0, whereas cpInfoCurrentSlide starts with 1. That is the reason why 2 is subtracted. In human language this command means Go to Previous Slide.You can replace it by ‘Go to Previous slide’ as well, but I like to repeat explanations like this. Sorry!
Alternative: Go to Previous Slide
- Continue: is necessary so that the playhead is released. It will quickly speed over that dummy slide (0,1 sec) and you’ll see the D&D slide almost immediately, freshly reset because it was re-entered and not scored.
- When no attempts are left the user is navigated to the last ‘End’ slide.
If you want to allow the same scenario for this slide, when the user revisits the slide, you have to reset the variable v_attempt to its original value, which can be done with the ELSE part of the action ContAct. It will have 2 commands in that scenario:
- Assign v_attempt with 3
- Go to Next Slide
To change the number of attempts, for example from 3 to 4:
- Change the default value of v_attempt to the new literal
- Create an extra Feedback message FB_Four and include it in Gr_Feedback (select both new message and group, followed by CTRL-G)
- in SubmitAct
- Duplicate the last decision ‘Three’, and label it ‘Four’
- Edit ‘Four’, replace ‘FB_Three’ by ‘FB_Four’
- Edit ‘Three’: replace the literal ‘0’ in the condition by ‘1’
- Edit ‘Two’: replace the literal ‘1’ in the condition by ‘2’
- Edit ‘One’: replace the literal ‘2’ in the condition by ‘3’
No other changes are necessary.