@Deepanjan Das, @JC Thanks for your replies! It seems that, despite my fondest hopes, there is no easy way to "retro-fit" hundreds of SWFs originally built without this loadMovie() requirement in mind.
Cheers and thanks :-) On Jan 30, 2008 8:05 PM, Hans Wichman <[EMAIL PROTECTED]> wrote: > Hi, > > check this out: > http://objectpainters.com/blog/2007/01/03/where-am-i-relative-paths/ > > The getPath things works in most cases. If you want a more complex version > that takes more things into account, you can use this: > You will need to replace the RuntimeExceptions with your own error > mechanism > (eg traces, regular errors). > > /** > * Resolves pAssetPath against pBasePath. > * > * - if pAssetPath is not a relative path, pAssetPath is returned (eg the > full url) > * - if pBasePath is an empty path, pAssetPath is returned > * - if pBasePath is a relative path, an error is thrown > * - in all other situation a path is returned which may still be or not > valid. > * > * @param pAssetPath, a full or relative url > * @param pBasePath, a full or empty url, this url MAY contain a file as > well, it is stripped automatically > * > */ > public static function resolve (pAssetPath:String, > pBasePath:String):String > { > //no base path > if (pBasePath == null || pBasePath.length == 0) return pAssetPath; > if (pAssetPath == null) { > throw new RuntimeException ( > "Assetpath cannot be null.", > Path, arguments.callee, null, null); > } > > //file asset path > if (pAssetPath.indexOf ("http") == 0 || pAssetPath.indexOf ("ftp") == 0 > || > pAssetPath.indexOf ("rmtp") == 0 || pAssetPath.indexOf ("file") == 0) > return pAssetPath; > //asset is relative, test basepath for correctness > if (pBasePath.indexOf ("http") != 0 && pBasePath.indexOf ("ftp") != 0 && > pBasePath.indexOf ("rmtp") != 0 && pBasePath.indexOf ("file") != 0) { > throw new RuntimeException ( > "Basepath is not null and not a full url, but needs to be either empty > or a full url.", > Path, arguments.callee, null, null); > } > > //so now we know that pAssetPath is a relative url and pBasePath is a > full > url. > //first normalize both urls so that we are dealing with only one type of > separator > var lAssetPath:String = pAssetPath.split > ("\\").join("/<file://%22).join(%22/> > "); > var lBasePath:String = pBasePath.split > ("\\").join("/<file://%22).join(%22/> > "); > //strip everything after ? to strip parameters from basepath > if (lBasePath.indexOf("?") > -1) { > lBasePath = lBasePath.substr (lBasePath.lastIndexOf("?")); > } > //check if basepath ends with /, if not check if everything after / > contains a . > //if it ends with / it is a directory, if it doesnt end with / and > everything after contains a . we assume > //we are dealing with a file, otherwise a directory > if (lBasePath.charAt (lBasePath.length-1) != "/") { > //and the last part contains a . cut it off > var lLastDir:String = lBasePath.substr (lBasePath.lastIndexOf("/")); > if (lLastDir.indexOf (".") != -1) { > //dealing with file > lBasePath = lBasePath.substr (0, lBasePath.lastIndexOf("/")+1); > } else { > //assume the last part was a dir and the trailing slash was forgotten, > so add it > lBasePath += "/"; > } > } > > //at this point we have a relative url and full directory path with a > trailing / > //now create two stacks > var lAssetStack:Array = lAssetPath.split ("/"); > var lBaseStack:Array = lBasePath.split ("/"); > > //remove trailing / from baseStack to provide a correct starting point, > //our invariant is that each directory 'starts' with a slash and not ends > lBaseStack.pop(); > > //remove any superflous items (pointers to current directory > //. points to current dir and isnt relative > //"" points to double slashes or a starting slash, we remove that too > while (lAssetStack[0] == "." || lAssetStack[0] == "") { > lAssetStack.shift(); > } > > //remove .. from assetStack AND end of basestack > while (lAssetStack[0] == "..") { > lAssetStack.shift(); > lBaseStack.pop(); > } > > return lBaseStack.join("/")+"/"+lAssetStack.join("/"); > } > > Usage eg: > xml.load (Path.resolve ("assets/config.xml"), _clip._url)); > > greetz > JC > > > On Wed, Jan 30, 2008 at 6:24 AM, Deepanjan Das <[EMAIL PROTECTED]> > wrote: > > > Hi, > > You need to keep duplicate files if you want it to work as single and > also > > when loaded from main movie. > > Easiest way is to create an xml directory at the place where the main > > movie > > resides and set the path as "xml/1.xml" > > > > also copy this directory in the screens directory > > > > so ths ame path will work for both :) > > Hope this helps > > > > Deepanjan Das > > > > On Jan 30, 2008 10:10 AM, confusticate and bebother these dwarves! < > > [EMAIL PROTECTED]> wrote: > > > > > Hello Flashcoders, > > > > > > I'm trying to make a main movie ("controller.swf") that loads other > > movies > > > ("screen1.swf", "screen2.swf", etc), which are stored in a > subdirectory > > > called "screens". > > > > > > In controller.swf I'm using loadMovie("screens/screenx.swf") to load > the > > > movies from the "screens" subdirectory, and this works fine. But the > > > problem > > > is that the movies in the "screens" subdirectory often reference XML > > files > > > (which also live in the "screens" subdirectory). All works well when > you > > > play the individual screenx.swf files, obviously, but when you play > > > controller.swf, it is looking for the XML files in the same directory > as > > > itself (one directory "up"). > > > > > > How can I fix this problem so that playing controller.swf works fine, > as > > > well as playing each individual screenx.swf file in the "screens" > > > subdirectory? Is this possible? It seems like such a simple idea, but > > I'm > > > so > > > stumped. > > > > > > I should mention that this project is not actually going online - it > is > > > going to be converted to an EXE using Zinc and distributed via CD. So > I > > > can't use absolute paths. > > > > > > Please! Heelp! Thanks! > > > _______________________________________________ > > > Flashcoders mailing list > > > [email protected] > > > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > > > > > _______________________________________________ > > Flashcoders mailing list > > [email protected] > > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > > > _______________________________________________ > Flashcoders mailing list > [email protected] > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > _______________________________________________ Flashcoders mailing list [email protected] http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

