I'm having a weird problem with using gotoAndStop/gotoAndPlay when
using an SWF output by swfmill.
I'm trying to implement a class that uses movie clips created in
swfmill as button states. The SWF generated by swfmill will contain a
clip for each button, which contains 4 frames, one for each button
state. The button class will detect which state it should display,
and do a 'gotoAndStop()' for the frame that represents that state.
Fairly simple stuff.
Here's the problem. If I try to change to a state that's defined
before the state it's currently displaying it doesn't work, unless I'm
going to the very first frame. It keeps displaying the last frame it
displayed. However, if I use an SWF with the same data, but generated
by the Flash IDE it works perfectly.
Probably easiest to explain if I just give you my code. here's the
swfmill input:
--------------------------------------------
<?xml version="1.0" encoding="iso-8859-1" ?>
<movie width="320" height="240" framerate="12" version="7">
<background color="#ffffff"/>
<clip id="upState" import="up.jpg"/>
<clip id="downState" import="down.jpg"/>
<clip id="overState" import="over.jpg"/>
<clip id="disabledState" import="disabled.jpg"/>
<frame>
<library>
<clip id="testButton">
<frame name="Up">
<place id="upState" depth="1"/>
<stop/>
</frame>
<frame name="Over">
<place id="overState" depth="1"/>
<stop/>
</frame>
<frame name="Down">
<place id="downState" depth="1"/>
<stop/>
</frame>
<frame name="Disabled">
<place id="disabledState" depth="1"/>
<stop/>
</frame>
</clip>
</library>
<place id="testButton" name="testButton" depth="1"/>
<textfield id="log" width="200" height="50" size="10" font="vera"
text="" x="0" y="30"/>
<place id="log" name="log" depth="10"/>
</frame>
</movie>
--------------------------------------------
And here's my test code that reproduces the error:
--------------------------------------------
class Main {
public static function main(mc:MovieClip):Void {
var iObj:Object = new Object();
iObj.testButton = mc["testButton"];
iObj.log = mc["log"];
iObj.count = 0;
iObj.setMode = function(mode:String):Void {
this.log.text = mode;
this.testButton.gotoAndStop(mode);
}
iObj.func = function():Void {
switch(this.count++ % 7) {
case 0:
this.setMode("Up");
break;
case 1:
this.setMode("Over");
break;
case 2:
this.setMode("Down");
break;
case 3:
this.setMode("Disabled");
break;
case 4:
this.setMode("Down");
break;
case 5:
this.setMode("Over");
break;
case 6:
this.setMode("Up");
break;
}
}
iObj.interval = setInterval(iObj, "func", 1000);
}
}
--------------------------------------------
I generate the SWF by doing:
swfmill simple test.xml test.sw
and I compile the code with:
mtasc -swf test.swf -main main.as
The state changes work fine until it hits case 4. The "Down" (4) and
"Over" (5) cases just keep displaying the Disabled state.
Again, if I replace the swfmill output with the output of the Flash
IDE, making the same thing, it works fine. The only thing I can guess
is that the frames I created in the IDE were created using "Insert
Blank Keyframe", but I don't know if that really has any relevance.
Anyone run into something like this? Am I just missing something
simple in my swfmill XML that would fix this? (I couldn't find any
good reference on the swfmill XML format, so I might just be missing
something).
Thanks!
-Andy
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com