fresh data will be delivered when the browser is refreshed or when
a user revisits the site due to the timestamp appended to the url .
Well I'm actually using SWF Studio to convert this into a transparent EXE - which will run on a desktop/kiosk. I'm wondering if I create a new file that has a timeline, and will just call the "L". When the timeline loops the application will just refresh it's self.
Otherwise - I think I'm out of options for getting this to auto update. At least for now...
I've been playing around with the set interval. The text totally wigs out when I update the XML - although it is updating... This exactly same thing happened when I added a timeline. I'm wondering if I need to unload and reload the XML somehow? Do you see this on your end?
The animation problem in the scrolling text is because of the tween itself..
When XML updated, calls the function to animate the text but the previous tween animation is still active (call itself recursively when finished) this in conjunction with the fact that used the same variables for all different parts of the tween animation, yields in this strange results as conflict the old and new tween animation and variable names..
You have to wait the tween animation to finished or stop it [myTween.stop()] (and possibly delete its reference) before every new tween cycle:
Use this for example (locate in your code and Use this variation for the tween animation -the replacement must be done is that shown in Red color- ):
Code:
... ...
... ...
trace(titles[0][p].LNK)
//getURL(titles[0][p].LNK); //open the url on Release
};
}
var myTweenX:Tween
var myTweenAlpha:Tween
var Completed=true // Used to avoid abrupt tween stop whenever new data loaded
//animate the text from right to left, pause when it is centered...
function animateText() {
// Wait for the current tween to completed (to avoid abrupt animation end)
if (!Completed) return
displayText();
setEvents(box_mc);
pauseTime = 2;
startX = w2+w1/2;
endX = 0-w1/2;
centerX = w2/2;
// To keep things clear, Delete tween reference before start a new cycle. Although
// this is not absolutelly necessary (especially, you can omit it, if wait the tween to finished)
if (myTweenX) {
trace("Current Tween Completed: "+new Date().toString())
myTweenX.stop()
delete myTweenX
myTweenAlpha.stop()
delete myTweenAlpha
}
Completed=false // Set "Completed" to false on tween start
myTweenX = new Tween(box_mc.container_mc.news_mc, "_x", Strong.easeOut, startX, centerX, 2, true);
myTweenAlpha = new Tween(box_mc.container_mc.news_mc, "_alpha", Strong.easeOut, 0, 100, 2, true);
myTweenX.onMotionFinished = function() {
myTweenX = new Tween(box_mc.news_mc, "_x", Strong.easeOut, centerX, centerX, pauseTime, true);
myTweenX.onMotionFinished = function() {
myTweenX = new Tween(box_mc.container_mc.news_mc, "_x", Strong.easeIn, centerX, endX, 2, true);
myTweenAlpha = new Tween(box_mc.container_mc.news_mc, "_alpha", Strong.easeIn, 100, 0, 2, true);
//repeat the animateText function and change the text
myTweenX.onMotionFinished = function(){
Completed=true
changeText();
animateText();
}
};
};
}
var colorText:Color = new Color(box_mc.container_mc.news_mc.news_txt);
var containerState:String = "down";
... ...
... ...
Note: I selected to wait the previous tween to finished before start a new one, in order to avoid abrupt tween termination (stop) whenever a new XML data loaded. (Just for "memory clean up" reasons I combined also a current tween deletion, before every new tween cycle)
Regards!
Kostas
Last edited by Kostas Zotos; 05-13-2008 at 10:27 AM.
Is this from the original code Modified Dog posted?
Yes (the L.zip file given in the previous page)
However independent of the file, the idea is to stop the running tweens (or wait them to finished) whenever the XML updated before call the function to animate the text. Stop the previous tween animation (or wait to finished) before start the new round..
A simple way to do that (stop tweens) is for example:
Code:
if (myTweenX) {
myTweenX.stop()
//delete myTweenX
myTweenAlpha.stop()
//delete myTweenAlpha
}
// Start here your new tween animation cycle..
By stopping the running tweens is quite possible to expect an abrupt transition (actually sudden cut) form the current point of tween animations to that of tween start.
To avoid this small problem may decide to wait the current animation to finished normally (this may takes a time from 1 to 6 seconds.. depends where the current tween(s) position is, when the XML data update occured)
I tested both methods (sudden cut or waiting the tweens to finished) and worked with no problem (The code is that given in my previous post)
Yes. Good stuff. One other quick question, i'm trying to get another swf to pop-up above the "L' - I'm having trouble defining the layer... is this rooted or leved? Maybe a stupid question, but I can't seem to get it to work eitherway. Am I missing something?
I'm having trouble defining the layer... is this rooted or leved?
Both can be used producing the same results..
Here is an example. No levels used, just a new depth value, to set z-order for the PopUp clip.
In general: A background Clip firstly created dynamicaly, to cover the rest clips and the PopUp loaded in front of this background. The background used also to capture the underline clip's mouse events..
1) Inser this code at the end of the code in your "L" file. 2) Locate also this line "Mcl.loadClip("L_PopUp.swf", PopUpContainer)" (at about the end of code) and Replace the external (.swf) clip (this would be the PopUp clip) with yours.
AS code (please read the comments for some additional details):
PHP Code:
// **************************** CODE FOR POPUP CLIP ****************************** //
// -------------------- CREATE A BACKGROUND FOR OUR POPUP ------------------------
// Create a background (for our PopUp) clip In front of all other clips
// this will cover all the stage
_root.createEmptyMovieClip("PopUpBg",_root.getNextHighestDepth())
PopUpBg.useHandCursor=false
// Draw a simple flat surface to cover the entire stage
with (PopUpBg){
var OffStage=20 // A value (in pixels) beyond stage limits (to ensure full cover)
var W=Stage.width+OffStage
var H=Stage.height+OffStage
// Fill with a gray (or maybe white) color (to gray out the underline clips)
// (draw a rectangular area to cover the stage)
beginFill(0x777777,80); // 80 => alpha (0-100)
// Use an "empty" handler to capture the mouse events
// (to "deactivate" the underline mouse events)
PopUpBg.onRelease=function(){
}
// ----------- CREATE A CONTAINER WHERE TO LOAD THE ACTUAL POPUP CLIP ---------------
_root.createEmptyMovieClip("PopUpContainer",_root.getNextHighestDepth())
PopUpContainer._alpha=0 // Make it invisible (to avoid flickering, when move from top left to center of stage)
// Optionally we use drop shadow filter in our PopUp
import flash.filters.DropShadowFilter;
var ShadowF=new DropShadowFilter(5, 45, 0x000000, 0.7, 10, 10) // (distance, angle, alpha (0-1), blurX, blurY)
var filtersArray=[]
filtersArray.push(ShadowF);
// --------------------- LOAD THE EXTERNAL .SWF (POPUP) ----------------------------
// Create a movie clip loader to load our external .swf (PopUp file)
var Mcl=new MovieClipLoader()
Mcl.onLoadInit=function(target){ // "target" is the "PopUpContainer" clip
// Center our PopUp on stage
target._x=(Stage.width-target._width)/2
target._y=(Stage.height-target._height)/2
PopUpContainer.filters=filtersArray // Assign the drop Shadow Filter
PopUpContainer._alpha=100 // make the PopUp visible (or use 90, 80, etc, for partial transparency)
}
// Load our external file (PopUp) in the container
// USE YOUR .SWF FILE INSTEAD
Mcl.loadClip("L_PopUp.swf", PopUpContainer)
/* AFTER LOADING: TO CLOSE THE POPUP, A POSSIBLE CODE WOULD BE FOR EXAMPLE:
// NOTE: This code normally must be palced inside PopUp file,
// eg. in a button which is inside your loaded PopUp insert this code:
CloseButton.onRelease=function(){
// Hide the PopUp and its Background, if plan to re-use them.
//_root.PopUpContainer._visible=false
//_root.PopUpBg._visible=false
// Completely unload the PopUp and its Background if you will not use them anymore.
unloadMovie(_root.PopUpContainer)
unloadMovie(_root.PopUpBg)
}
*/
Regards!
Kostas
Last edited by Kostas Zotos; 05-22-2008 at 01:28 PM.
Thanks for the post. After a few delays, I'm back on this project again. Looking are you're code - it looks to be exacly what I need, however I'll need the pop-up called from the XML and I"m not exacly sure to incoporate this. I've tried serveral different ways, however it still comes-up behind the "L"...
Any suggestions would be totally helpful.
Hope all is well!
~ Brian
If I understood well.. You may put all the code in my previous post (that for PopUp) inside a custom function, and then call that function from inside your XML parser function..
Example at the end of your parser function may insert something like (shown in red):
Code:
xmlParse = function (xmlObj) {
// ... ...
// .. ...
// Maybe also put the function call in a condition
// if you don't want a popUp in every XML update cycle..
ShowPopUp() // Call to launch the PopUp
}
function ShowPopUp(){
// Insert here all the code given in my previous post
}
Important: My code uses the "getNextHighestDepth()" to create a container for the PopUp clip.. So it is important to call the function for PopUp after all data has been loaded and any initialization actions (or dynamicaly created clips) have been completed..
As alternative, you may insert pre-defined/custom values for depths -manually for all your major elements/objets- (you have then also to locate and change the depths in my code, giving the larger of these predefined depth values in my "PopUpBg" and "PopUpContainer" clips) [instead of use the "getNextHighestDepth()"] in order to ensure that the PopUp will be always the topmost movie in your screen.. However this means you have some additional coding and modifications
Also may insert something like these AS lines, after (at the end of) the code that creates the PopUp , so that brings these clips in front of the rest (not test it, so i am not sure if actually works):
PHP Code:
_root.PopUpBg.swapDepths(_root.getNextHighestDepth()) // PopUpBg => a dynamicaly created clip, used as background for the "PopUpContainer" clip
_root.PopUpContainer.swapDepths(_root.getNextHighestDepth())
I think you are close to success..
------------------------------------
Hope all is well!
Thank you! hope you too (U2)
Kostas
Last edited by Kostas Zotos; 05-30-2008 at 03:00 PM.
Dis-regard that last posting. This seems to work, but I need the pop-up to be transparent... is that possible?
Again - thanks for the help...
Scratch that again - I'm way to eager to post before I play around with the code.
Everything seems to be working great with what you sent over. Thank you! I just need to spend some time editing my SWF's to pop-up properly in the container. They seem to be load all weird...
Again - hope all is well. Thanks for the help & support!!!
I just ran into another issue (which I know is on my end). I've gotten the pop-up to work well with some swfs, however - to complicate things, I now have and swf the pulls an external xml to play a list of other swf's. All of the swf's play just fine in standalone, but when i call them using the swf/xml - i get nothing....
Here's the swf code calling the swf's:
Code:
import mx.transitions.Tween;
import mx.transitions.easing.*;
// Fade functions
function fadeIn(){
var the_tween:Object;
the_tween = new Tween(container_brian, "_alpha", Regular.easeOut, 0, 100, 1, true);
}
function fadeOut(){
var the_tween:Object;
the_tween = new Tween(container_brian, "_alpha", Regular.easeOut, 100, 0, 1, true);
}
// Load XML
function loadXML(loaded) {
if (loaded) {
xmlNode = this.firstChild;
swiff = [];
total = xmlNode.childNodes.length;
for (i=0; i<total; i++) {
swiff[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
}
firstswiff();
}
else {
content = "ERROR: Not loaded!";
}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
// make a timestamp, add to xml url to force fresh data
vers = new Date().getTime();
xmlData.load("main.xml?vers="+vers);
// End of xml
my_loader = new MovieClipLoader();
my_loader.addListener(this);
function onLoadInit(mc:MovieClip) {
preloader._visible = false;
}
function onLoadProgress(container_brian, bL, bT){
perc = Math.round((bL/bT)*100);
container_brian_txt.text = perc+" %";
preloader._visible = true;
}
var k:Number = 0;
function firstswiff(){
my_loader.loadClip(swiff[k], container_brian);
fadeIn();
}
// External swf files call this function
// Call function AScode: _root.nextswf();
function nextswf(){
k++;
if(k > total-1){
k=0
fadeIn();
my_loader.loadClip(swiff[k], container_brian);
}
fadeIn();
my_loader.loadClip(swiff[k], container_brian);
}
Could this be a container issue? Totally stummped on this one...
Check these points: 1) Is the "container_brian" on the _root or inside another clip ?
(Your code implies that is on _root, otherwise must give the correct path)
Also the loaded files will replace the "container_brian" (Use it -the "container_brian" - to refer the loaded clip)
2) Make sure your .swf file names inside XML have not leading or trailing spaces
3) When test your file Offline use: xmlData.load("main.xml")
When test it Online (or in a local running server) then use the: xmlData.load("main.xml?vers="+vers);
--------------------------------------------
Here is also a completely new approach based on levels:
(This is just a very basic example: The PopUp loaded into _level1, and the _root (_level0) is made just invisible):
PHP Code:
ShowPopUp() // Use it to call the "ShowPopUp" function
// ***************** CODE FOR POPUP CLIP (LOADS POPUP IN _LEVEL1) ********************* //
function ShowPopUp(){
// --------------------- LOAD THE EXTERNAL .SWF (POPUP) ----------------------------
// Create a movie clip loader to load our external .swf (PopUp file)
var Mcl=new MovieClipLoader()
Mcl.onLoadInit=function(target){ // "target" is here the _level1
_root._visible=false //Hide everything in the _root (_level0)
// Center our PopUp on stage (if needded)
//trace(target)
_level1._visible=false
target._x=(Stage.width-target._width)/2
target._y=(Stage.height-target._height)/2
_level1._visible=true
}
// Load our external file (PopUp) in the _level1
// USE YOUR .SWF FILE INSTEAD
Mcl.loadClip("L2_LoadPopUp.swf", 1)
/* AFTER LOADING: TO CLOSE THE POPUP, A POSSIBLE CODE WOULD BE FOR EXAMPLE:
// NOTE: This code normally must be palced inside PopUp file,
// eg. in a button which is inside your loaded PopUp insert this code:
Finally based on your code, I made this example -For Flash 8- (and works fine for me) [this is actually your code, adjusted to a working example (the external .swf files loaded from an XML in an empty clip -"container_brian"- No special PopUp used, just loaded into the previous container without problem..]
Thanks for your kind words!
(LoL.. I am a normal person -believe- )
.. If there's anything I can do for you - don't hesitate to ask. Keep in touch...
Thank you very much!
BTW: In my example ("L2.zip" file -in my previous post- ) there is a function which removes spaces from a given string argument.
This function removes all spaces and maybe this is unwanted in some cases..
I recommend to replace that function with this one (which removes only any leading and/or trailing spaces):
PHP Code:
//Removes possible leading or trailing spaces from input arguments (eg. XML string values)
function trim(Arg:String){
var Result="",Char=""
var Start=0
var End=Arg.length-1
// Example use:
var Name:String
Name=trim(Name) //Removes (any) leading and/or trailing spaces
Note: If input a value from an XML which contains spaces, and use this value (file name) to load eg. an external file, most probably the loading will fail..
Best Regards!
Kostas
Last edited by Kostas Zotos; 06-05-2008 at 12:06 PM.
Quick question about adding description in xml and flash
Hello I have a flash xml photo gallery that was previously made. I love everything about it but i would like to be able to have descriptions of the pictures once they are clicked. I know this isnt very hard i am just not very famililar with xml or flash. I know in xml i can just add something like <desc>THIS IS MY DESCRIPTION</desc> in the already created xml however I am not sure how to create the container or whatever so it will display in flash.
Let me know if you would like me to send you the .fla file. It is bigger than the 300kb so i will give you a link to download it if you need to. Thanks for the help.
He
Let me know if you would like me to send you the .fla file. It is bigger than the 300kb so i will give you a link to download it if you need to. Thanks for the help.
Welchyboy - I would suggest creating a new topic for your question (as this doesn't really pertain to this thread). I can help you out then. Should be rather simple. Let me know when you've done that.