On Tue, May 08, 2007 at 11:43:39AM +0800, zou lunkai wrote: > In sprite_instance::goto_frame() > resetDisplayList() clears all static characters placed from frame1 to > current frame when jump back. Instead of doing that, I think we should > just clear static characters placed from target frame to current > frame. This might solve some problems above.
The main problem with our "reverse-execution" mechanism was associating an instance with its PlaceObject2 tag. The implementation we found in gameswf was scanning the playlist matching the instance id/depth with the ones specified in PlaceObject2 and RemoveObject tags. This was inappropriate because depth of an instance can be changed by either subsequent PlaceObject2 tags (with move flag set) or by ActionScript. If we store a TimelineInfo object to "static" objects we might solve this problem. The TimelineInfo might be a pointer to the PlaceObject2 tag (now in its own header extracted with this in mind) and the frame number in which it was executed. Things to check before proceeding (by adding more testcases) are: - What happens when instance in frame 2 changes it's matrix or depth due to a PlaceObject2 tag in frame 3 when looping back from frame 6 to frame 4 ? What if we loop back to 2 or to 3 ? - Are dynamic instances moved to the "static range depth" by ActionScript also removed by loopback ? (see misc-ming.all/displaylist_depths_test.c) - Are static instances moved to the "dynamic range depth" still removed by loop-back ? (again, see displaylist_depths_test.c) - Are load/unload events of instances placed and removed before the target frame of a loop-back invoked again ? --strk; _______________________________________________ Gnash-dev mailing list [email protected] http://lists.gnu.org/mailman/listinfo/gnash-dev

