Copy link to clipboard
Copied
I upload a certain swf file, it has graphics.On the first frame, Figure 1, on the second frame, figure 2. How do I stop the cyclic playback of these two frames? I tried gotoAndStop(4) but it doesn't work for some reason. Perhaps can just call the desired image after loading the swf file through the class or addChild(), but I do not know how.
var mcGraphics: MovieClip = new MovieClip();
var myLoader: Loader = new Loader();
var url: URLRequest = new URLRequest("ExternalSWF.swf");
myLoader.load(url);
mcGraphics.addChild(myLoader);
addChild(mcGraphics);
mcGraphics.x = 10;
mcGraphics.y = 175;
mcGraphics.gotoAndStop(4) //Does not stop the loop on a specific frame
Link to the uploaded swf file: https://terabox.com/s/1CX3K5TQQix7qDeQ4PPGY9Q
Sure.
Try this:
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.events.Event;
var myLoader:Loader = new Loader();
var url:URLRequest = new URLRequest("ExternalSWF.swf");
function completeHandler(e:Event):void
{
var loader:Loader = (e.currentTarget as LoaderInfo).loader;
var swfRoot:MovieClip = loader.content as MovieClip;
swfRoot.stop();
e.currentTarget.removeEventListener(e.type, arguments.callee);
}
myLoader.load(url);
myLoader.contentLoaderInfo.addEven
...
Copy link to clipboard
Copied
your gotoAndStop will stop mcGraphics from looping, but won't stop any children (unless they're graphic symbols) from looping including myLoader.
you need to reference myLoader or the a child of myLoader. which loaded timeline is looping?
Copy link to clipboard
Copied
My loader is looping
Copy link to clipboard
Copied
then apply a stop to it (after loading is completed).
Copy link to clipboard
Copied
myLoader.gotoAndStop(3)
Returns an error
1061: Accessing the possibly undefined gotoAndStop method via a static flash.display type link:Loader.
Copy link to clipboard
Copied
did you use a complete event to ensure loading was completed?
Copy link to clipboard
Copied
Hi.
You must first add an event listener of type Event.COMPLETE to the loader's content loader info object to make sure the content is ready to be accessed. Like this:
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
Also, you're adding a generic MovieClip instance so there won't be frame 4 in it. Maybe what you want is the instance to be of a custom type set in a symbol in the Library.
Please check these points and let us know.
Regards,
JC
Copy link to clipboard
Copied
To be honest, I didn't really understand what the event listener gives. If it's not difficult for you, could you look at my sources. The External SWF.fla file contains two images on different frames, this file is exported to swf and loaded into another swf file (Test.fla). But when the images from External SWF are loaded, the looped playback of all two frames begins, but I need only one (specific) frame to be displayed. How to do it?
https://drive.google.com/drive/folders/1cALM05SNWomyedssU-2dA5T7vw2ysCr8?usp=share_link
Copy link to clipboard
Copied
try:
var mcGraphics: MovieClip = new MovieClip();
var myLoader: Loader = new Loader();
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeF);
var url: URLRequest = new URLRequest("ExternalSWF.swf");
myLoader.load(url);
mcGraphics.addChild(myLoader);
addChild(mcGraphics);
mcGraphics.x = 10;
mcGraphics.y = 175;
function completeF(e:Event):void{
MovieClip(myLoader.getChildAt(0)).gotoAndStop(3);
}
Copy link to clipboard
Copied
Gives the following error:
TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::Loader@36d687e4ea1 to flash.display.MovieClip.
at Test_fla::MainTimeline/completeF()
Copy link to clipboard
Copied
i updated the code (several times).
Copy link to clipboard
Copied
Sure.
Try this:
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.events.Event;
var myLoader:Loader = new Loader();
var url:URLRequest = new URLRequest("ExternalSWF.swf");
function completeHandler(e:Event):void
{
var loader:Loader = (e.currentTarget as LoaderInfo).loader;
var swfRoot:MovieClip = loader.content as MovieClip;
swfRoot.stop();
e.currentTarget.removeEventListener(e.type, arguments.callee);
}
myLoader.load(url);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
addChild(myLoader);
Copy link to clipboard
Copied
Great. Thank you very much
Copy link to clipboard
Copied
You're welcome!
Copy link to clipboard
Copied
@JoãoCésarTell me what to do if I need to add (myLoader) to a simple button. When I hover over the button, all frames are played inside it and the original position (the first frame) is reset. How can I fix this problem ? (myLoader) is also placed in movieclip, since the button will contain not only (myLoader), but also other images.
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.events.Event;
var mcGraphicsButton: MovieClip = new MovieClip();
var button: SimpleButton = new SimpleButton();
var myLoader: Loader = new Loader();
var url: URLRequest = new URLRequest("ExternalSWF.swf");
function completeHandler(e: Event): void {
var loader: Loader = (e.currentTarget as LoaderInfo).loader;
var swfRoot: MovieClip = loader.content as MovieClip;
swfRoot.gotoAndStop(2)
e.currentTarget.removeEventListener(e.type, arguments.callee);
}
myLoader.load(url);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
function makeGraphics() {
var rect: Shape = new Shape();
rect.graphics.beginFill(0x00ff00)
rect.graphics.drawRoundRect(0, 0, 200, 200, 12, 12);
return rect;
}
mcGraphicsButton.addChild(makeGraphics());
mcGraphicsButton.addChild(myLoader);
button.upState = mcGraphicsButton;
button.overState = mcGraphicsButton;
button.downState = mcGraphicsButton;
button.hitTestState = mcGraphicsButton;
addChild(button)
 
Copy link to clipboard
Copied
Hi.
Sorry for the late reply.
Did you find the solution?
Please let us know.
Regards,
JC
Copy link to clipboard
Copied
Hello, no
Copy link to clipboard
Copied
Hi again.
I think it would be more efficient if you inserted the drawings into the button states instead of inserting the loader.
And why do you need the green rectangle?
Copy link to clipboard
Copied
Hello. A how can i insert a picture into the button ? Do I need to convert the loader to an image? The green rectangle is the background for the drawing, the background may be a different color. I painted it green just for an example.