Re: [Flashcoders] loadMovie from subdirectory - change base path
Can you use the base attribute in the params to set somewhere that you can then use relative paths. |param name=base value=http://www.example.com/pages/; http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_04157sliceId=2 http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_04157sliceId=2 Glen | Bob Leisle wrote: One simple solution would be to physically move your controller swf into the screens directory and run it from there. Then they'll all have the same path and no retrofitting needed. hth, Bob Amanda Kuek wrote: @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
Re: [Flashcoders] loadMovie from subdirectory - change base path
Hi, i think this applies to using an html file in location a loading an swf from location b. Seeing Amanda has two different basepaths, setting the base to nr 1 will confuse nr 2 and vice versa. Copying everything to the same directory like Bob said seems a good and simple solution though:). greetz JC On Fri, Feb 1, 2008 at 11:31 AM, Glen Pike [EMAIL PROTECTED] wrote: Can you use the base attribute in the params to set somewhere that you can then use relative paths. |param name=base value=http://www.example.com/pages/; http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_04157sliceId=2 http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_04157sliceId=2 Glen | Bob Leisle wrote: One simple solution would be to physically move your controller swf into the screens directory and run it from there. Then they'll all have the same path and no retrofitting needed. hth, Bob Amanda Kuek wrote: @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();
Re: [Flashcoders] loadMovie from subdirectory - change base path
@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
Re: [Flashcoders] loadMovie from subdirectory - change base path
One simple solution would be to physically move your controller swf into the screens directory and run it from there. Then they'll all have the same path and no retrofitting needed. hth, Bob Amanda Kuek wrote: @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
Re: [Flashcoders] loadMovie from subdirectory - change base path
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
[Flashcoders] loadMovie from subdirectory - change base path
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 Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders