Back to Contents   |   Previous Section   |   Next Section

6.3     Feedback and Time Limits

We now turn our attention to the topic of providing feedback. In many experimental designs, it is important that the participant receive feedback that lets them know things such as whether their last response was correct, or how long they took to respond. The RFV has a mechanism for providing such feedback. Before we continue however, we will first specify a new COMPONENT called ``Component 3'', and specify a block within it.

    ...
component( "Component 1"
            ... 
) 
component( "Component 2"
            ... 
) 
component( "Component 3"
        block(

        )
) 

Within this new block, we will specify a DISPLAY containing a statement and a row consisting of two buttons. The buttons display ``TRUE'' and ``FALSE'', allowing a participant to make a choice about the validity of the statement.

    ...
component( "Component 3"
        block( 
                display(
                        text_line("Rome was built in a day.")
                        v_space(80)
                        row(
                                button("TRUE")
                                h_space(100)
                                button("FALSE")
                        )
                ) 
        )
) 

If we now run the RFV on the input file, then the block in ``Component 3'' will appear as is shown in Figure 27.

A simple two choice block.

Figure 27.   A simple two choice block.

When the participant responds to this block by selecting one of the buttons, we may wish to inform them about whether not they selected the correct button. This can be done by using the FEEDBACK parameter within the BLOCK parameter. A FEEDBACK parameter takes as its first argument the label of the button for which feedback is being provided. Therefore, if we wish to inform the participant that they chose an incorrect response, we would specify a feedback parameter for the ``TRUE'' button as follows.

    ...
component( "Component 3"
        block( 
                display(
                        text_line("Rome was built in a day.")
                        v_space(80)
                        row(
                                button("TRUE")
                                h_space(100)
                                button("FALSE")
                        )
                ) 
                feedback( "TRUE"

                ) 
        )
) 

This FEEDBACK parameter is now treated as a block that will appear if the participant selects the button labelled ``TRUE''. Inside the FEEDBACK parameter, after the relevant button label has been provided, it is possible do almost anything that can be done inside a BLOCK parameter with the following exceptions. The BUTTON and the STIMULUS parameters cannot be defined inside the DISPLAY parameter of the feedback block, and a feedback block itself cannot contain a FEEDBACK parameter. This is because a feedback block is meant purely as a passive block providing information to the participant. It is not meant to contain interactive elements that might themselves require feedback.

Aside from these restrictions, feedback blocks can do anything else that can be done in a normal block. In our example, we will use the feedback block we have defined to inform the participant that their response was incorrect.

    ...
component( "Component 3"
        block( 
                display(
                    ...
                ) 
                feedback( "TRUE" 
                        display(
                                text_line("Incorrect"
                                        foreground(255 0 0) )
                                text_line("Rome wasn't built in a day!"
                                        font("SansSerif" PLAIN 20) )
                        ) 
                ) 
        )
) 

Now if we run the RFV, if when we get to the block in ``Component 3'' we select the ``TRUE'' button, the RFV window should appear as in Figure 28.

Feedback for an incorrect response.

Figure 28.   Feedback for an incorrect response.

You will have no doubt noted that the RFV does not require feedback for every button defined. If the program is run again and the ``FALSE'' button is selected, the program will then just go on with the next block, since there is no feedback specified for this button response. Should we desire that feedback is also given for a correct answer, we can do this by adding another feedback block to the input file.

    ...
component( "Component 3"
        block( 
                display(
                    ...
                ) 
                feedback( "TRUE" 
                    ...
                )  
                feedback( "FALSE"
                        display(
                                text_line("Correct")
                                response_time()
                        )
                ) 
        )
) 

In the DISPLAY parameter of this new FEEDBACK block, we have used a new parameter. This is the RESPONSE_TIME parameter. It works just like a TEXT_LINE parameter, except that a label is not explicitly given. Instead, the label automatically contains the total time the participant spent viewing the block before giving a response, measured in milliseconds. (This does not include the time taken to load the block.) The RESPONSE_TIME parameter can only be used within a feedback block, and just as with the TEXT_LINE parameter it is possible to specify the FONT and the FOREGROUND colour of the text. Figure 29 provides an example of the RFV window when the correct button has been selected after the block in Figure 27 has been visible for about three and half seconds.

Feedback that includes the time taken to respond.

Figure 29.   Feedback that includes the time taken to respond.

If no buttons have been specified within a block, it is still possible to assign feedback by using the NO_BUTTONS keyword in place of the label of a button as the first argument of the FEEDBACK parameter. The RFV will give a warning if a FEEDBACK parameter has been defined with an invalid or irrelevant first argument, such as a label that does not match any button labels.

There is one more parameter that can be applied to a block that we have not yet discussed. In many circumstances, it is desirable that a participant can only see a certain block for a limited amount of time. The RFV allows this to be specified by using the TIME_LIMIT parameter. This parameter takes as its argument an integer that is the maximum number of milliseconds that the block should be visible for. For example, we can make the block in ``Component 3'' visible for only five seconds by adding the following.

    ...
component( "Component 3"
        block( 
                time_limit(5000) 
                display(
                    ...
                ) 
                feedback( "TRUE" 
                    ...
                ) 
                feedback( "FALSE"
                    ...
                ) 
        )
) 

Although we have added the TIME_LIMIT parameter at the beginning of the block, it could also have been placed after the DISPLAY parameter or after the FEEDBACK parameters with the same effect. If the RFV is now run on ``Component 3'', it is still possible to select one of the buttons (and thus see the resulting feedback block) if the selection is made before the time limit expires. However, if the time limit expires before a button has been selected (or the mouse has been clicked anywhere if the block contains no buttons), then the block will automatically end and the program will just continue with the next block.

Of course, the participant may find it disconcerting to have the block suddenly finish without them having done anything. Therefore, it may be prudent to provide feedback when the time limit expires. This can be done by specifying a feedback block with the TIME_LIMIT_EXPIRED keyword in place of the label of a button as the first argument.

    ...
component( "Component 3"
        block( 
                    ...
                feedback( "TRUE" 
                    ...
                ) 
                feedback( "FALSE"
                    ...
                ) 
                feedback( TIME_LIMIT_EXPIRED
                        display(
                                text_line("Sorry - the time limit expired")
                        )
                )  
        )
) 

Now if we run the RFV and let the time limit expire on the block in ``Component 3'', the RFV window will appear as shown in Figure 30.

Feedback to indicate that the time limit expired.

Figure 30.   Feedback to indicate that the time limit expired.

Occasionally, we may want to force the participant to view a block for the exact time limit; that is, we may not want to allow them to end the block early by selecting a button, or if there are no buttons, clicking the mouse anywhere in the RFV window. This can be done by adding the STRICT keyword as an optional argument to the TIME_LIMIT parameter, placing it after the integer that specifies the number of milliseconds the block should be visible for.

    ...
component( "Component 3"
        block( 
                time_limit(5000 STRICT) 
                display(
                    ...
                ) 
                    ...
        )
) 

If the RFV is now run on the input the file, the block specified within ``Component 3'' will be visible for exactly five seconds, regardless of whether the a button is selected or not. As a result, the feedback block that appears can only be the one with TIME_LIMIT_EXPIRED as the first argument. Note that FEEDBACK blocks can also have a TIME_LIMIT parameter defined as an argument. This can be convenient if the feedback is only meant to be presented briefly before the participant continues on with the next block.

In this example, we composed the input file a bit at a time, and then tested it to make sure it did what we expected. This is a good approach to take when creating input files. Also, if unsure about what effect a particular parameter might have in a certain situation, try it and see. If it doesn't work as expected, it is easy to remove it from the input file or try it in a different place.

Back to Contents   |   Previous Section   |   Next Section