- Getting Information from Smart Clips
- Passing Data to Smart Clips
- About This Article
Passing Data to Smart Clips
Now that you can get values out of your smart clip, how can you send values back in? What if you wanted to change the Label names or the currently set button states without actually going back in and editing the Clip Parameters? Piece of cakeyou do it with ActionScript.
Exercise 2 - Passing Information to RadioButton Smart Clips
The easiest way to pass information back into your smart clip is to add some additional actions to the Test Me button.
-
Either continue in the same file, or open keating1_ex2.fla from the web site. Select the Test Me button and launch the Actions panel.
Add three calls to the setLabel() function and three calls to the setState() function, as illustrated below:
on (release) { radioBox1.setLabel("Asparagus"); radioBox2.setLabel("Tomato"); radioBox3.setLabel("Bean Sprouts"); radioBox1.setState(true); radioBox2.setState(false); radioBox3.setState(false); firstButton = radioBox1.getState(); secondButton = radioBox2.getState(); thirdButton = radioBox3.getState(); }
Why did you add these function calls before you set the values for the variables that populate the text boxes? Because if you have them in the reverse order, the text fields in the movie won't accurately represent the current button states.
-
Test your movie. Remember, the values you entered in the Parameters panel will still be thereuntil you click the Test Me button. When you release the button, you make the call to the functions. (See Figure 2.)
Figure 2 - When you click on the Test Me button, you initiate calls to the setLabel() and setState() functions and change the values on the Stage.
You passed the parameters to the functions as actual valueseither a string of information or a Boolean value. You could have just as easily passed the parameters as variables. To see how this would work, change the code in the Test Me button to this:
on (release) { radioBox1.setLabel(firstValue); radioBox2.setLabel(secondValue); radioBox3.setLabel(thirdValue); radioBox1.setState(firstState); radioBox2.setState(secondState); radioBox3.setState(thirdState); firstButton = radioBox1.getState(); secondButton = radioBox2.getState(); thirdButton = radioBox3.getState(); }
Add a new layer to your movie and label it Actions. Select frame 1 and launch the Actions panel. This is where you'll set the values for the variables you just entered in the Test Me button.
Enter the following code:
firstValue = "Apples"; secondValue = "Pears"; firstValue = "Peaches"; firstState = true; firstState = false; firstState = false;
Test your movie again.
But what if you wanted to be able to change the Label names without having to open up the FLA file, edit it, and re-export the SWF? Not a problem. All you have to do is store the information in a text file and load the variables from there.
TIP
When you use loadVariables() to load data from a text file, the format of the text file is importantthe extension on the file is not. That means that as long as the text in the file is in the proper name/value pair format, the file can be created as a .txt (simple text file), .asp (Active Server Page), .cfm (ColdFusion), .pl(Perl), .php(PHP), or whatever kind of fileit doesn't matter.
Exercise 3 - Updating RadioButton or CheckBox Smart Clips from a Text File
The format for the text file is fairly straightforwardit will just be a list of name/value pairs separated by ampersands (&). Before you create the text file, you'll remove the variables that you initialized in frame 1 of the main timeline. Then you'll create the text file. Lastly, you'll add new Actions to the Test Me button.
Open your text editor of choice and type the following:
radioBox1=Jaguar&radioBox2=Boxster&radioBox3=Mustang&firstState= false&secondState=false&thirdState=false
Save your file as data.txt in the same directory as your published SWF file.
-
Either continue in the same file or use keating1_ex3.fla from the web site. Select all three of the check boxes and input fields on the Stage and convert them to a movie clip (F8) named RadioButtonsMC.
Assign the movie clip an instance name of radio (Window > Panels > Instance).
On frame 1 of the main timeline, first remove all of the existing actions, then load the variables from the data.txt file. In the Actions panel, type the following:
radio.loadVariables("data.txt");
Select the radio movie clip and in the Actions panel add an onClipEvent and call the setLabel function:
Without closing the Actions panel, select the Test Me button on the Stage. Delete all of the setLabel() and setState() calls and modify the calls to getState() to match:
on (release) { _root.radio.firstButton = _root.radio.radioBox1.getState(); _root.radio.secondButton = _root.radio.radioBox2.getState(); _root.radio.thirdButton = _root.radio.radioBox3.getState(); }
-
Save and test your movie. If you're having problems, check keating1_exfinal.fla on the web site.
onClipEvent (data) { _root.radio.radioBox1.setLabel(firstValue); _root.radio.radioBox2.setLabel(secondValue); _root.radio.radioBox3.setLabel(thirdValue); }
NOTE
The onClipEvent() can respond to a number of events. The data event occurs when data is received by the clip from a loadVariables() or loadMovie() action.
By now it should be pretty clear how you get information into and out of Flash's three pre-installed smart clips. You can either use the Clip Parameters or you can use ActionScript to retrieve and send variables.