I recently had a chance to ask Jack Doyle, the creator of TweenLite/Max, some questions in between projects. As some of you who regularly read this blog already know, I’m a huge fan of Jack’s TweenMax and use it on a regular basis. Jack is a friend and colleague, yes, but that is not why I choose to use his work. I use it because his coding is second to none and he does great work with whatever classes he releases, not just his tweening classes. Not many people know Jack because he isn’t one of the huge names in the industry and likes to keep a low profile, but his work has been getting more and more exposure recently because of the praise everyone is giving it. With this interview you can gain a bit more insight into who Jack is and what’s coming up in the future with his stuff.
EVOLVE: Thank you for taking time out to answer the following questions. Can you give a brief introduction as to who you are, what you do, and where you’re from?
Jack Doyle: I’m a stunningly good-looking, wealthy, humble man who lives on a remote tropical island with a gorgeous wife, surrounded with cool technology and a plentiful supply of Breyer’s ice cream. Oh, wait, did I confuse my dreams with reality again? Sorry. Okay, the gorgeous wife part was true, but that’s it. I’m actually just a big geek who doesn’t like talking about himself much. However, in the interest of putting this question behind us, I’ll offer a brief summary: The Chicago suburbs have always been my stomping grounds, I’m married to a Brazilian woman, have precious 2 sons, and although my formal training was all in graphic design, I fell in love with Flash and ActionScript so now I spend most of my days writing code. I often get obsessed with whatever I’m working on at the moment and stay up to the wee hours of the morning figuring things out. I still enjoy design and have won some awards for it, but I prefer writing efficient code that brings things to life on the screen. Video fascinated me for a while, so I got pretty good at working in After Effects and I used to do a ton of photo retouching too (in Photoshop of course). Most of my clients work in the advertising industry. I play volleyball and basketball and have an interest in Christian apologetics. I became a Christian after years of being an atheist. It changed my life more than anything else, and I think people are generally far too reluctant to talk about faith and the nature of truth. Oh, and I have a chocolate ice cream milk shake almost every night.
E: What inspired you to be a Flash developer? How did you get started?
JD: I worked at an advertising agency where I started designing web sites and farmed out the production. The production people just kept letting me down, so I bought some books and software and went to work figuring out how to accomplish my vision without their help. After experimenting and writing lots of hideous code, I started figuring a few things out, eventually creating some nifty “splash page animations” (I cringe at the thought now). The incredible flexibility, power, and visual richness that Flash offered fascinated me. I fell in love and started attacking various challenges that popped up along the way (“how do I create a preloader?”, “how can I load external content?”, “what can I do to make things perform better and load faster?”, etc.). The rest is history.
E: What compelled you to create your most famous work, TweenLite?
JD: I had to create some banners with strict file size requirements and I needed a tweening engine to accomplish some of the interactivity. I looked around at the various options and I was shocked by how bloated and difficult to use they were. One engine was almost 40kb and my banner had to be 30k (including all the graphics/fonts/code!). I needed something small, nimble, and easy to use. I couldn’t find it, so I tried to make it. TweenLite was born. It has matured a lot over the years as I continue to tweak it for performance and add features, but the focus has always been keeping it lightweight, flexible, and extremely fast.
E: You’ve expanded the TweenLite engine into a whole family of tweening classes. Is there an official name for all your tweening classes? Are there any features that you are thinking about adding into future versions that you can talk about a bit here?
JD: Yeah, I kept getting feature requests that I just couldn’t justify adding to the core TweenLite class because I wanted to protect it from the dreaded “code bloat” which most of the other engines had succumbed to by cramming every feature under the sun into the main class. I eventually decided to extend TweenLite into TweenFilterLite and then TweenMax too which offer all the capabilities of TweenLite plus a bunch more. Then there was TweenGroup which provides some really cool sequencing/group management features. And a few other specialized classes were created too, so now I call it the “GreenSock tweening platform”.
As far as new features, yes, I’m pretty excited about a few upcoming enhancements. Here’s a sneak peek:
I’m working on rebuilding the special properties parsing routines so that TweenLite/FilterLite/Max use a “plugin” model which would make it very simple to extend and create your own plugins for handling special properties of your choosing. It would also allow you to activate/deactivate most of the features, meaning you could start with the base class and only add the features you need, minimizing file size and maximizing performance.
TransformMatrixProxy is getting a major update too. It will likely change its name to simply “TweenProxy”. It essentially “stands in” for a DisplayObject/MovieClip, so that when you change the proxy’s properties, it handles changing the DisplayObject’s/MovieClip’s properties and it adds the following capabilities:
- Use a custom registration point around which all transformations occur (scale/rotation/skew). Imagine loading an external image and tweening its scale using the center as the registration point. Or use one registration point for 20 MovieClips so that when you tween their rotation, they all rotate around that point. It can be very convenient and powerful.
- Skew a DisplayObject/MovieClip by setting simple skewX/skewY properties. These are completely tweenable too of course.
- Directly set the tint, tintPercent, or exposure properties. Exposure can be handy if you want to have an object get super-bright with that overexposed look – just tween its exposure property to 1 and then back to 0 in order to make it appear to flash. You probably need to see it to understand it, but TweenProxy makes it super-simple to tween that effect.
- You don’t need to only set/tween the special TweenProxy properties with the class – it will handle ANY property/method of the DisplayObject/MovieClip, so you can use the proxy for all your tweens of that object (x/y/alpha/whatever)
There will also be a TweenProxy3D class that’s identical except that it works with the new 3D capabilities of Flash Player 10. So you can set a registration point in 3D space and then scale/rotate/skew DisplayObjects around it. Imagine positioning 20 Sprites in 3D space, setting a common registration point for them, and then simply tweening their rotationY properties and they all rotate around a common point.
E: I imagine that you get a lot of feature requests based on other engines as well as things people would like to see in your engine. Are there any worthy features that you decided not to add? For what reason(s)?
JD: Nope, if the features are worthy, I add ‘em. Otherwise I don’t But with the new plugin architecture, it’ll open up new possibilities because even if I choose not to add some special property to the core class, it could be offered as an optional plugin that users could activate.
E: While TweenLite is a great engine, why (as has been the case with some of your other classes) didn’t you just use something already existing? Why go through all the trouble of writing all these classes from scratch?
JD: Because I’m a snob. No, seriously though, there were two reasons:
1) Nothing else out there fit my needs. I was unwilling to compromise speed, size, or ease-of-use.
2) I’m a bit of a control freak and I wanted the ability to know exactly what’s going on in the guts of the class so I could change/fix/enhance it as necessary. If I changed existing classes, it’d work fine until they released an update at which point I’d have to try to sift through their changes/enhancements and combine them with my customizations (no fun).
E: You recently released a class called CustomEase. With the new tweening available in Flash CS4, do you think this class will become obsolete or do you think it will continue to contribute to the community?
JD: I’m still learning about the enhancements in CS4, but from what I understand, the new tweening model primarily affects timeline tweens, not ActionScript-driven ones. So no, CustomEase will not be obsolete. I predict that more and more people will want to experiment with creating custom ActionScript-driven eases. It’s pretty fun actually.
E: Your TransformManager is an excellent tool for transforming display objects in Flash during runtime. Although this, some people may be hesitant to use it because of the seemingly hefty price tag on it. Can you explain why the license costs what it does?
JD: Absolutely. Good question. Unlike the tweening classes, TransformManager is a pretty niche product. It represents an investment of more than $20,000 worth of my time now, and anyone who has tried to create something similar will no doubt confirm that $299 is a bargain. There are many complexities, especially with allowing multiple selections and imposing bounds properly. Since it is a niche product, the demand is lower, so the price needs to justify the time it took to create and to sustain development. Also, we’ve all seen open source (or super cheap) projects that fizzle and die because the authors got busy with other stuff and couldn’t cash-flow the project. My hope is that the income generated by TransformManager sales would help guard against those common frailties of open source projects and in the end provide a better service to developers. Keep in mind that I offer a 30-day money back guarantee too, so you can get your $299 back if you don’t like the class.
E: You run something called Club GreenSock. Could you give a brief explanation of what that is and what are the benefits of being a member?
JD: Club GreenSock is a way I say “thanks” to those who support my development efforts with donations at various levels. Members get benefits like bonus classes (TweenProxy, CustomEase, LiquidStage, etc.), update notifications, and more. There are individual memberships as well as corporate ones (corporate memberships come with a license to use the code in commercial software applications). Some people join the club as a way of thanking me for the tweening classes, but I think that most join to get the useful bonus classes, especially TransformMatrixProxy (which will likely be replaced by TweenProxy soon). Either way, I really appreciate all you Club GreenSock members out there. You make all this possible.
E: If a user wants to grab hold of a class that is only available through a Club GreenSock membership, how would they go about obtaining a license without wanting to actually join the club?
JD: Sorry, but the bonus classes are only for members. I wanted a way to say “thanks” and provide value back to those who support me. The feedback I’ve received from club members has been overwhelmingly positive, and if you don’t like it, I offer a 30-day money back guarantee.
E: Looking at some of the code in your classes could make someone’s head fall off. How do you make sense of the way you’ve organized the code when making future updates?
JD: Are you insulting my code? How dare you.
I definitely didn’t write the code for readability – I focused on speed. So there are plenty of places where I normally would break things out into separate methods, etc., but function calls are expensive performance-wise and speed is REALLY important in a tweening engine. It’s easy for me to sift through my code, but I can see why some developers might feel a little daunted when they look at the source. There aren’t any specific tactics I used to organize the code other than trying to group similar functions together and give them intuitive names.
E: You’ve contributed so much to the community yet nobody really knows who YOU are or even what you look like. Outside of the picture in your About section, are you going to be making any appearances or doing any speaking engagements in the future?
JD: Yeah, I get that a lot. I’ve been asked to speak on several occasions, but I prefer to be like the Wizard of Oz and stay behind the curtain. I’m sure it would be a big disappointment to see me in person and listen to me babble on about code. I may do a conference here or there or maybe some user group meetings at some point, but I don’t have anything locked in right now – just some open invitations that I’m considering.
E: Do you foresee that Silverlight is going to become a real threat to Flash in the future?
JD: Heavens no. Don’t get me wrong – I’m sure it will get some traction because Microsoft (and more importantly, Microsoft’s marketing budget) is behind it. But Flash is so pervasive and people are generally very happy with it, that Silverlight would have to have some incredibly compelling unique features which I just don’t see. Flash will be here for a long time.
E: While we’re on the subject, where do you think Flash is headed?
JD: I’m not one of those guys who’s great at looking way out into the future and prognosticating. That way I minimize my chances of being wrong. I’ll just say “better”. (oooh, daring, I know)
E: What made you open up your forums?
JD: I kept getting same question 20 times, so I thought the forums would become a great resource for folks looking to get their questions answered. Plus there are some really smart people out there that could help answer many of the questions instead of having them all funnel through me. I love the community of TweenLite/Max users out there. They tend to be very sharp and helpful.
E: Are there any other classes currently in the works (or in your mind) that you can divulge some juicy gossip about?
JD: Juicy gossip? Never. Gotta keep everyone guessing.
E: What advice can you give to aspiring developers or designers who want to become developers?
JD: Don’t eat yellow snow.
But regarding coding, I’d just say that you should experiment. A lot. Try stuff and see it break and then figure out how to fix it. Don’t be too hard on yourself. Pick up a book or two about ActionScript and read some every day. Watch videos on gotoAndLearn and Lynda.com and visit sites like Kirupa and EVOLVE of course
E: Is there anything else you’d like to share and let the world know about you?
JD: I used to be a semi-professional break dancer. Well, if landing one “gig” at my great-grandmother’s nursing home when I was 12 qualifies as “semi-professional”, that is. I’m not even sure anyone was watching and I didn’t get paid, so maybe I’m stretching the definition of “semi-professionasl” a bit.