Jump to content
Search Community

Carl last won the day on June 9

Carl had the most liked content!

Carl

Moderators
  • Posts

    9,838
  • Joined

  • Last visited

  • Days Won

    547

Everything posted by Carl

  1. Glad to hear it worked. I know quite a bit about xml but I've never used LiquidStage. I STRONGLY suggest you check out the GreenSock ImageLoader. It allows you to load an image with one line of code like: //create loader var loader:ImageLoader = new ImageLoader("img/photo1.jpg", {name:"photo1", container:this, x:180, y:100, width:200, height:150", centerRegistration:true, onComplete:onImageLoad}); //begin loading loader.load(); read more here: http://www.greensock.com/as/docs/tween/ ... oader.html Its a lot to read as there are a TON of features, but it is the most painless way to load images AND the images are smoothed by default. for the time it takes to figure out how to load one image it will save you all the reading and hassle of figuring out how to manually create BitMapData thingies, copy pixels, apply smoothing and all that other nonsense. If you have time investigate LoaderMax which allows you to have all your external assets and their properties listed in a very clean XML file. LoaderMax will load the XML and then automatically load all your assets, place them where they need to be, and report the progress of how everything is loading. Furthermore you can prioritize the loading of your assets so if while image2 is loading the user wants to see image10 right away, no problem. LoaderMax jumps in, loads image10 and when its done it goes back to image2. there is a lot to read about and play with, but it is well worth the time investment. I can honestly say that after using LoaderMax on a project once, I will never load another mp3, swf, image or video without it. http://www.greensock.com/loadermax/
  2. wait, all 66 objects are moving? what happened to the business about moving an object from origin to point A back to origin to point B? i can see that I may have misunderstood your original question a bit but your latest post makes things even more confusing to me. in your loop try using insert instead of append. that will make all the tweens happen at once and not one after the other tl.insert(TweenMax.to(vballs[j],.1, {x:Bx[j], y:By[j], z:Bz[j]})); // Array with obj 1 coords if you are just starting to get a hang of AS3, this goal may be a tad ambitious. I'd suggest reading through the TimeliteMax documentation, and perhaps experimenting with some of the basics before tackling an integration with Away3D. even the little stuff is a lot of fun. good luck on your project.
  3. hello un4given, you are exactly right, you were creating the SplitTextField before your comments were loaded and inserted into the proper dynamic TextField. this will work import com.greensock.*; import com.greensock.easing.*; import com.greensock.TweenMax; import com.greensock.text.SplitTextField; //declare videoin outside of any functions var videoin:SplitTextField; var loader:URLLoader = new URLLoader() loader.dataFormat = URLLoaderDataFormat.TEXT loader.addEventListener(Event.COMPLETE, onLoadXML) loader.load(new URLRequest("expert.xml")) function onLoadXML(ev:Event){ try{ //Convert the downloaded text into an XML var myXML:XML = new XML(ev.target.data) var list:XMLList = myXML..title //walks the list and show in textfields for(var i=0; i //trace(list.@name+"-"+list.comments+" - "+list.image) this["Title_txt"+i].text = list.@name this["Comments_txt"+i].text = list.comments //populate videoin AFTER the xml has loaded and Comments_txt0 has its text property set videoin=new SplitTextField(Comments_txt0); var loader:Loader = new Loader() this["holder_mc"+i].addChild(loader) loader.load(new URLRequest(list.image)) } } catch (e:TypeError){ //Could not convert the data, probavlu because //because is not formated correctly trace("Could not parse the XML") trace(e.message) } } good luck with the rest of it. looks neat. Carl
  4. Hi toonzy, you can just loop through your coordinates arrays and append tweens to a TimelineLite/Max. this basic example provides a clear visual illustration of tweening an object from origin -> point a -> origin -> point b -> origin etc. http://www.snorkl.tv/dev/objectGoMultip ... index.html the code looks like this import com.greensock.*; var tl:TimelineMax = new TimelineMax({repeat:-1}); var objectsArray = new Array(red_mc, green_mc, blue_mc, orange_mc, pink_mc); var objectsCount:Number = objectsArray.length; //for every object or coordinate in an array do something: for (var i:int = 0; i //tween to the next object / point tl.append(TweenMax.to(ball_mc, .8, {x:objectsArray[i].x, y:objectsArray[i].y})); //tween back to the origin tl.append(TweenMax.to(ball_mc, .8, {x:origin_mc.x, y:origin_mc.y})); } cs4 source fla attached
  5. Carl

    Timeline Q

    as a followup to my last suggestion look here http://www.snorkl.tv/dev/fakeLoop/fakeLoop.html this approach is going to be the easiest to implement once your container has a duplicate of the first image at the end, the code for this example is simply import com.greensock.*; var tl:TimelineMax = new TimelineMax({repeat:-1, onComplete:reset}); var tweenCount:int = 0; while (tweenCount tl.append(TweenLite.to(container, 1, {x:"-150", delay:.5})); tweenCount++; } function reset(){ trace("complete"); container.x = 500; } cs4 fla attached
  6. Carl

    Timeline Q

    Hi beno, the code is working exactly as expected. your timeline starts out with image 1 on stage (it doesn't tween in) image 2 comes in from the right and pushes 1 off to the left image 3 comes in from the right and pushes 2 off to the left when you repeat... it jumps back to the beginning with image 1 just sitting there on the stage. if you want the first image to tween in from the right as the last image (3) tweens out to the left you have 2 options with your current setup: option 1) create a duplicate of the first image so your sequence will really be 1, 2, 3, 1. When the last image 1 is done tweening... then restart your timeline which will shift everything back to the starting positions option 2) as soon as image 3 is done sliding in (onComplete), reposition image 1 to the right of image 3 while image 3 slides out left also slide in image 1 from the right when that tween is done, tell the timeline to restart this works fine for a small handful of images. suppose you had 100 images you wanted to tween in such a sequence. It would be very difficult (performance wise) to tween them all at the same time. The best way to approach this is really to only tween 2 images at a time 1 - the image currently being displayed 2- the next image that needs to be displayed to see this concept in action take a look at this thing I made ages and ages ago with AS2 http://doyouhaveapen.com/junkyart/dynam ... ORIAL.html CLICK the button that says EXPANDED TUTORIAL MODE and follow the instructions. this little tutorial was built to show that you can literally navigate / scroll through thousands of thumbnails / objects by only moving the ones that need to move. the source file is ancient but the general concepts are quite valid. when I get into situations like this I often try to build my animation on the flash timeline or use a series of post-it notes on my desk so that I can visualize exactly what needs to happen... then I try to communicate what I need to happen with actionscript. The purpose of this forum is to help people understand the workings of the greensock tweening classes. As much as I enjoy helping, it isn't feasible to offer assistance through multiple phases of project development. Hopefully the advice given will be sufficient to allow you to chose a course of action for your next step. As always, I suggest starting with a very simple file (without buttons flying around and changing state) that allows you to tween through a series of just 3 images in a seamless loop. Once you get that hammered down you can integrate it into the larger project. Carl EDIT -since all your images are in 1 container that is being tweened, it will most likely be easiest just to do option1 and add another image 1 after image 3 in the container. you will just need to add 1 more tween to your timeline.
  7. Carl

    Timeline Q

    replace the first 2 functions in test.as with these: public function test() { BackgroundImages(); //getTweenCount(0); } private function BackgroundImages():void { var img_container:Sprite = new Sprite(); for (i; i { var img:Images = new Images(); img.ImagesArray = [bkgnd_imgs, "index.py", 1006,523, 0, 0]; img.x = 1006 * i; img_container.addChild(img); } addChild(img_container); var timeline:TimelineMax = new TimelineMax({repeat:-1}); while (tweenCount { timeline.append(TweenLite.to(img_container, 1, {x:-1006*tweenCount, delay:2, onStart:getTweenCount, onStartParams:[tweenCount]})); tweenCount++ } timeline.play(); } i made the same changes I suggested previously. when the timeline repeats, the first button is light blue when the first image is displayed give it try it should work c
  8. thanks for providing the converted file. it really helped me see what was happening. I appreciate that you stripped out all the non-essentials and made something that was easy to trouble-shoot. first you had code like this: inclick.addEventListener(MouseEvent.CLICK, goin); function goin(evt) { TweenMax.allFrom(videoin.textFields, 1, {y:50,x:300, autoAlpha:0}, 0.05); } outclick.addEventListener(MouseEvent.CLICK, goout); function goout(evt) { TweenMax.allTo(videoin.textFields, 1, {y:50,x:300, autoAlpha:0}, 0.05); } so when you first do a goin() all the characters TWEEN FROM x50, y300, alpha0 TO where they initially are positioned on the stage when the tween is generated. when you do a goout() they all go BACK TO x50, y300, alpha0 (works great) the next time you do goin() they try to TWEEN FROM x50, y300, alpha0 and guess what? they are already there, so there is no where to go and nothing to see. this is a great time to use TimelineLite as it will allow you to create the series of allFrom tweens once and then play() and reverse(); slam this into the file you sent import com.greensock.*; import com.greensock.easing.*; import com.greensock.TweenMax; import com.greensock.text.SplitTextField; var videoin:SplitTextField=new SplitTextField(test); //create a TimelineLite var textAnimation:TimelineLite = new TimelineLite(); //add your allFrom to the TimelineLite textAnimation.appendMultiple(TweenMax.allFrom(videoin.textFields, 1, {y:50,x:300, autoAlpha:0}, 0.05)); inclick.addEventListener(MouseEvent.CLICK, goin); function goin(evt) { //play the timeline forward textAnimation.play(); } outclick.addEventListener(MouseEvent.CLICK, goout); function goout(evt) { //reverse the timeline textAnimation.reverse(); } what is great about this is that you can jam on the in out buttons while the animation is playing in either direction and it switch direction seamlessly. If you have any questions let me know. Carl
  9. i can only view cs4 or lower fla. thx
  10. Carl

    Timeline Q

    Hi Beno, as a note it doesn't do much good if you provide files that can't compile because there are missing classes. the problem is tweenCount is never 0 the code: var tweenCount:int = 0; while (tweenCount++ { trace(tweenCount); } will output 1 2 3 possibly the reason things appear to work the first time around is because you have this public function test() { BackgroundImages(); getTweenCount(0); } which forces getTween to run with an argument of 0 (which probably generates your trace) ... but 0 is never generated in your timeline building loop while (tweenCount++ { timeline.append(TweenLite.to(img_container, 1, {x:-1006*tweenCount, delay:2, onStart:getTweenCount, onStartParams:[tweenCount]})); } timeline.play(); your code is incrementing tweenCount BEFORE the contents of the loop run. you could do var tweenCount:int = 0; while (tweenCount { trace(tweenCount); tweenCount++ } will output 0, 1, 2 give it a shot also to learn more about the post / pre ++ increment operator check out: http://livedocs.adobe.com/flash/9.0/Act ... #increment it helped me quite a bit.
  11. Carl

    Timeline Q

    Beno, thanks for the clear explanation. so it seems the root problem is that your case 0 isn't running on repeat of the timeline. if you go back to my original files that I attached, that example repeats and the proper values trace each time the timeline plays. so there is not anything internally wrong with the greensock files not firing the onStart function or passing in the onStartParams. it is always good to make sure you are using the latest com folder. are you using an old version perhaps. if you want to post a simplified fla file (cs4 or lower) I can try to look at it tonight. you should try to strip down (in a separate file) the timeline to a point where only 1or 2 simple tweens is happening and you can trace tweenCount every time the timeline repeats.
  12. Carl

    Timeline Q

    hi beno i don't really understand the question. what do you mean by "when the tween repeats"? do you mean the timeline? there is a big difference if something special has to happen at the end of the timeline to reset things you could try var timeline:TimelineMax = new TimelineMax({repeat:-1, onComplete:resetStuff}); // or maybe onRepeat:resetStuff function resetStuff(){ //do stuff to make the buttons do the right thing } thinking about it more in your switch statement you should be able to handle what needs to be done in case 0 or case 9 i really don't know what the problem is. The initial question was in regards to determining which tween was playing and now there is a lot more functionality involved with switching buttons around. It would probably help if you explained what exactly you were trying to accomplish. perhaps you can post a swf somewhere and describe what should happen and what is happening that is wrong. much easier than trying to decipher code fragments. Carl
  13. yeah, this is a real pain when dealing with Flash's pseudo 3D stuff. luckily smarter people than I have figure this out: http://www.kirupa.com/forum/showthread.php?t=349258 to apply the concepts from the link above with TweenLite/Max try: var startX:Number = mc.x; var startY:Number = mc.y; TweenLite.to(mc, 2, {rotationY:360, onComplete:kill3D}); function kill3D():void{ mc.transform.matrix3D = null; mc.x = startX mc.y = startY; }
  14. by using addChild() on the back movieclip you will put it on the top of the display list here is a very basic implementation TweenMax.to(front_mc, 2, {y:"100", repeat:-1, yoyo:true}); TweenMax.to(back_mc, 2, {x:"100", repeat:-1, yoyo:true}); front_mc.addEventListener(MouseEvent.CLICK, sendBack); function sendBack(e:MouseEvent):void{ //move the back to the front addChild(back_mc); } you can change the depths of the items being tweened and the tweens don't miss a beat. there are many methods available to re-sort object depths in the display list. read: http://www.republicofcode.com/tutorials ... splaylist/ or just search for "as3 display list change depths"
  15. just downloaded latest. compiles and runs fine : Flash CS4 : Mac
  16. Carl

    Timeline Q

    Thanks for adding those alternate options. I had a feeling there were some better ways. now I know. -c
  17. There isn't much that can be assessed from the code you displayed. are you sure that you are creating the SplitTextField AFTER the xml is loaded AND the textfield that is to be split has been populated with the text from the xml? if so, perhaps you can post more code or a very simplified example fla Carl
  18. Carl

    Timeline Q

    one way you could do it is like so. import com.greensock.*; import com.greensock.easing.*; var tl:TimelineMax = new TimelineMax({repeat:-1}); var tweenCount:int = 0; while (tweenCount++ tl.append(TweenLite.to(mc, 1, {x:tweenCount *50, delay:1, onStart:getTweenCount, onStartParams:[tweenCount]})); } tl.play(); function getTweenCount(currentTween:int):void{ trace(currentTween); //this function could be set to return a value //return currentTween //or set global variable to the value that you need. //tweenCount = currentTween } don't have time to explain but cs4 fla attached (no greensock classes) you might also use addLabel() when each tween is created and then call tl.getLabelBefore() or something similar
  19. Carl

    Timeline Q

    The value of whichPic will only change from 1 to 10 while the while loop is running. the loop will run virtually instantaneously. After the loop runs, the value of whichPic will be 10 for eternity. The playing of the timeline, or tweens in the timeline will have no effect whatsoever on the value of whichPic. make the following adjustments to your code: var timeline:TimelineMax = new TimelineMax(); whichPic=1; while (whichPic timeline.append(TweenLite.to(img_container, .1, {delay:6.5, x:-1006*whichPic}) ); ++whichPic; trace("while " + whichPic); } timeline.repeat=-1; stage.addEventListener(Event.ENTER_FRAME, whatsWhichPic); function whatsWhichPic(e:Event){ trace("enterFrame " + whichPic); } you will see the following output: while 2 while 3 while 4 while 5 while 6 while 7 while 8 while 9 while 10 enterFrame 10 enterFrame 10 enterFrame 10 enterFrame 10 enterFrame 10 enterFrame 10 enterFrame 10 enterFrame 10 enterFrame 10 enterFrame 10 enterFrame 10 enterFrame 10 enterFrame 10 ... in conclusion, the value of whichPic will always be 10. I have a hunch you may have meant to ask "how do i determine which tween is playing" or something similar. If so, please clarify. Carl
  20. hello Tom, to overwrite the default ease and have continuous motion on tweens that repeat try import com.greensock.easing.Linear; TweenMax.to(path, 20, {progress:1, repeat:-1, yoyo:true, ease:Linear.easeNone}); that's all I can help with -carl
  21. Hello, I don't know if I quite understand your question if you are using GreenSock tweening tools, you are going to be using AS2 or AS3. If you want to use TweenLite/Max to control an existing timeline based animation either in a Movie Clip or on the Main Timeline you can use the frame and frameLabel plugins. Here is a basic overview of using the frameLabel plugin with TweenMax http://www.snorkl.tv/2010/10/overview-o ... backwards/ If you need more help, please clarify the question, would love to assist you. Carl
  22. using TweenLite you can add an onUpdate callback function to your tween like so: TweenLite.to(mc, 1, {x:100, onUpdate:updateFunction}); function updateFunction(){ trace("i'm moving"); } read more here: http://www.greensock.com/as/docs/tween/ ... nLite.html using TweenMax you can use the callback OR a standard as3 eventListener like so: import com.greensock.* import com.greensock.events.TweenEvent; var tweenMc:TweenMax = TweenMax.to(mc, 5, {x:600}); tweenMc.addEventListener(TweenEvent.UPDATE, updateFunc) function updateFunc(e:TweenEvent):void{ trace("update " + mc.x); if(mc.x>300){ trace("update done"); tweenMc.removeEventListener(TweenEvent.UPDATE, updateFunc); } }[/code] for a list of all the callbacks and events read here: http://www.greensock.com/as/docs/tween/ ... enMax.html
  23. I took a look at the swf and it seems like a strange flash rendering bug. It's clear the the tweens are working well. I noticed that where ever the flip button overlaps the text, there is a doubling of the text that is constrained to a rectangular shape. this rectangle grows when the glow effect is a applied to the flip button on roll over. this private video illustrates the problem and an interesting glitch when you zoom in: the video will only be seen by people clicking that link. I can take it down at any time, but figured it made things much more clear than a bunch of words. I don't have a solution, but would suggest looking into the code and visual assets that are being used on that button. is the artwork a transparent png? try replacing it with something else. are you using a layer mask somewhere in the card? (they stink in general and may be even worse in 3D space) Again, I don't think it has anything to do with TweenLite, most likely the limits of the flash player in rendering complex objects / filters in 3D space. If you can reproduce this error in a stripped down fla that only contains a single card flipping back and forth, I would be happy to look at it. Carl
  24. Hello Aaron, Very glad to hear that it works for you now. It's these little exercises and troubles that will make you a strong developer. Keep up the great work. Carl
×
×
  • Create New...