avm2: Correctly apply 'skip_next_enter_frame' to Loader
We were missing the initial 'set_skip_next_enter_frame(true)' call, and we weren't properly clearing it in `enter_frame`. Loaders appear to have the same behavior as MovieClips. This makes us correctly run the first framescript for the loaded SWF.
This commit is contained in:
parent
33f585fa6c
commit
ba88b52167
|
@ -117,6 +117,8 @@ impl<'gc> TDisplayObject<'gc> for LoaderDisplay<'gc> {
|
||||||
}
|
}
|
||||||
child.enter_frame(context);
|
child.enter_frame(context);
|
||||||
}
|
}
|
||||||
|
self.base_mut(context.gc_context)
|
||||||
|
.set_skip_next_enter_frame(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn construct_frame(&self, context: &mut UpdateContext<'_, 'gc>) {
|
fn construct_frame(&self, context: &mut UpdateContext<'_, 'gc>) {
|
||||||
|
|
|
@ -640,6 +640,12 @@ impl<'gc> Loader<'gc> {
|
||||||
// 'this.parent == null' and 'this.stage == null'
|
// 'this.parent == null' and 'this.stage == null'
|
||||||
mc.post_instantiation(context, None, Instantiator::Movie, false);
|
mc.post_instantiation(context, None, Instantiator::Movie, false);
|
||||||
catchup_display_object_to_frame(context, mc.into());
|
catchup_display_object_to_frame(context, mc.into());
|
||||||
|
// Movie clips created from ActionScript (including from a Loader) skip the next enterFrame,
|
||||||
|
// and consequently are observed to have their currentFrame lag one
|
||||||
|
// frame behind objects placed by the timeline (even if they were
|
||||||
|
// both placed in the same frame to begin with).
|
||||||
|
mc.base_mut(context.gc_context)
|
||||||
|
.set_skip_next_enter_frame(true);
|
||||||
|
|
||||||
if let Some(MovieLoaderEventHandler::Avm2LoaderInfo(loader_info)) = event_handler {
|
if let Some(MovieLoaderEventHandler::Avm2LoaderInfo(loader_info)) = event_handler {
|
||||||
let mut activation = Avm2Activation::from_nothing(context.reborrow());
|
let mut activation = Avm2Activation::from_nothing(context.reborrow());
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 6.2 KiB |
Binary file not shown.
Binary file not shown.
|
@ -4,10 +4,14 @@ loader.contentLoaderInfo.bytesLoaded = 0
|
||||||
loader.contentLoaderInfo.bytesTotal = 0
|
loader.contentLoaderInfo.bytesTotal = 0
|
||||||
loader.contentLoaderInfo.bytes = null
|
loader.contentLoaderInfo.bytes = null
|
||||||
loader.contentLoaderInfo.url = null
|
loader.contentLoaderInfo.url = null
|
||||||
Event [ProgressEvent type="progress" bubbles=false cancelable=false eventPhase=2 bytesLoaded=0 bytesTotal=674]: loader.numChildren = 0, loader.content = null, loader.contentLoaderInfo.bytesLoaded = 0, loader.contentLoaderInfo.bytesTotal = 674, loader.contentLoaderInfo.url = null
|
Event [ProgressEvent type="progress" bubbles=false cancelable=false eventPhase=2 bytesLoaded=0 bytesTotal=738]: loader.numChildren = 0, loader.content = null, loader.contentLoaderInfo.bytesLoaded = 0, loader.contentLoaderInfo.bytesTotal = 738, loader.contentLoaderInfo.url = null
|
||||||
Event [ProgressEvent type="progress" bubbles=false cancelable=false eventPhase=2 bytesLoaded=674 bytesTotal=674]: loader.numChildren = 0, loader.content = null, loader.contentLoaderInfo.bytesLoaded = 674, loader.contentLoaderInfo.bytesTotal = 674, loader.contentLoaderInfo.url = null
|
Event [ProgressEvent type="progress" bubbles=false cancelable=false eventPhase=2 bytesLoaded=738 bytesTotal=738]: loader.numChildren = 0, loader.content = null, loader.contentLoaderInfo.bytesLoaded = 738, loader.contentLoaderInfo.bytesTotal = 738, loader.contentLoaderInfo.url = null
|
||||||
|
Framescript frame 1
|
||||||
Hello from loaded SWF!
|
Hello from loaded SWF!
|
||||||
loader.contentLoaderInfo === loader.content.loaderInfo : true
|
loader.contentLoaderInfo === loader.content.loaderInfo : true
|
||||||
loader.contentLoaderInfo.content === loader.content : true
|
loader.contentLoaderInfo.content === loader.content : true
|
||||||
Event [Event type="init" bubbles=false cancelable=false eventPhase=2]: loader.numChildren = 1, loader.content = [object LoadableMainTimeline], loader.contentLoaderInfo.bytesLoaded = 674, loader.contentLoaderInfo.bytesTotal = 674, loader.contentLoaderInfo.url = file:///
|
Event [Event type="init" bubbles=false cancelable=false eventPhase=2]: loader.numChildren = 1, loader.content = [object LoadableMainTimeline], loader.contentLoaderInfo.bytesLoaded = 738, loader.contentLoaderInfo.bytesTotal = 738, loader.contentLoaderInfo.url = file:///
|
||||||
Event [Event type="complete" bubbles=false cancelable=false eventPhase=2]: loader.numChildren = 1, loader.content = [object LoadableMainTimeline], loader.contentLoaderInfo.bytesLoaded = 674, loader.contentLoaderInfo.bytesTotal = 674, loader.contentLoaderInfo.url = file:///
|
Event [Event type="complete" bubbles=false cancelable=false eventPhase=2]: loader.numChildren = 1, loader.content = [object LoadableMainTimeline], loader.contentLoaderInfo.bytesLoaded = 738, loader.contentLoaderInfo.bytesTotal = 738, loader.contentLoaderInfo.url = file:///
|
||||||
|
Framescript frame 2
|
||||||
|
Framescript frame 1
|
||||||
|
Hello from loaded SWF!
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,4 +1,4 @@
|
||||||
num_frames = 3
|
num_frames = 4
|
||||||
|
|
||||||
[image_comparison]
|
[image_comparison]
|
||||||
tolerance = 0
|
tolerance = 0
|
||||||
|
|
Loading…
Reference in New Issue