
I recently got an invite from someone at the kirupa.com forums to some Aviary tools. I only have access to two tools at the moment (Phoenix and Peacock), and only tested Phoenix (Peacock was a bit too complicated to test).
All I’ve got to say is, wow. This toolset is quite impressive. It has some very nice basic features, a few filter effects, hotkeys (!), and it is very smooth (it’s slow at times, but that’s because of my limited CPU). The interface is very nice, although the icons and panels are a little too big and take a lot of real estate IMO.
Still, it’s a little buggy, and there a Feedback menu on the toolbar for easy, well, feedback.
I’m going to play more with Phoenix and try to make something cool. I really want to test Hummingbird (the 3D editor), but I don’t know how to sign up for the beta or even if it’s available.
I have a few invites remaining, so if you want to try them, just post.
TweenLite is a light-weight tweening engine for AS2 and AS3.
Tweening engines make animating objects through code a breeze. Instead of figuring out how to get to a certain point or value of an object’s property, all you need to do is figure out where you want that property to be (or where you want it to come from), the time it takes to get there, and you have movement.
There are a lot of tweening engines out there, but I prefer TweenLite because it is light (only 3kb), it is easy to use, does what I want it to do, and if I want more functionality, it has two older brothers*.
To get started, first you need to download TweenLite (I’ll be discussing the AS3 version here), and save it into your classpath.
There are 2 static methods you need to know, TweenLite.to() and TweenLite.from().
Those two methods take in three arguments:
- The object you want to animate
- The time, in seconds, the animation will span
- A dynamic Object instance target with predefined properties (this is where you put the values you want to reach)
So, to animate a box, it only takes one line to make it do some crazy stuff.
[sourcecode language='js']
import gs.TweenLite; // import TweenLite
box_mc.x = 0;
box_mc.y = 100;
TweenLite.to(box_mc, 2, {x: stage.stageWidth, y: 200, rotation: 360, scaleX: 2, scaleY:2, alpha: .5});
//this will move the box to the edge of the stage, move it down 100 px, rotate it, scale it to 2x its
//size, and make it transparent, for 2 seconds.
[/sourcecode]
Note that the TweenLite.from() method does the exact opposite of TweenLite.to(). It transforms your object to your third argument properties, and animates them towards the state the object has on the stage (very useful).
There are comments in the .as file itself, and explains some important things. This was to show how useful and indispensible tweening engines are. I can’t beleive how long I’ve strayed away from them, but now, I can’t live without them.
*TweenFilterLite - TweenLite + filtering capabilities
TweenMax - TweenFilterLite + bezier curves
I’ve been working on my site for a few weeks now, and I have developed a class that will handle how I display assets on my site.
Basically, it “throws” in items into the stage, and you could shuffle them around or you could stack them up. I’ve made it very easy to use, and it’s still under development, but I think it’s ready to be used by others. This is my first class I’ve ever shared, and though it’s not much, I hope someone likes it or maybe even use it.
You can use any DisplayObject as the ‘items’ of the Shuffler.
There are explanations in the code, but here are some important points
- shuffle() - shuffles the items
- stack() - stacks the items
- setFocusOn(item:DisplayObject) - sets the item param as the focused item
- addItem(item:DisplayObject) - adds item param to the shuffler
- deleteItem(index:int) - deletes the item at index
- has max property for maximum number of boxes allowed. 0 for infinite.
Here is an example:
Sample usage in code:
[sourcecode language='js']
package{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.*;
import flash.text.TextField;
import com.mindfock.ui.Shuffler;
public class TestShuffler extends Sprite{
private var boxes:Array;
private var shuffler:Shuffler;
private var stacker:TextField;
private var shuffle:TextField;
private var adder:TextField;
public function TestShuffler(){
init();
}
public function init():void{
shuffler = new Shuffler(400, 300, 6);
createBoxes(6);
createButtons();
addChild(shuffler);
}
private function createBoxes(num:int):void{
boxes = new Array();
for (var i:int = 0; i < num; i++)
{
trace("created");
var box:Sprite = drawBox(50, 50) as Sprite;
boxes.push(box);
shuffler.addItem(box);
}
}
private function drawBox(w:Number, h:Number):DisplayObject{
var box:Sprite = new Sprite();
box.graphics.lineStyle(2, 0x000000);
box.graphics.beginFill(Math.random() * 16000000);
box.graphics.drawRect(0, 0, 100, 100);
box.graphics.endFill();
return box;
}
private function createButtons():void
{
// I've left out the drawing of the buttons
square.addEventListener(MouseEvent.CLICK, shuffleHandler);
square2.addEventListener(MouseEvent.CLICK, stackHandler);
square3.addEventListener(MouseEvent.CLICK, addHandler);
}
private function shuffleHandler(event:MouseEvent):void{
shuffler.shuffle();
}
private function stackHandler(event:MouseEvent):void{
shuffler.stack();
}
private function addHandler(event:MouseEvent):void{
var newBox:Sprite = drawBox(50, 50) as Sprite;
shuffler.addItem(newBox);
}
}
}
[/sourcecode]
Just save it in your classpath, under com/mindfock/ui
You need TweenLite for the tweening animations… If you don’t know what it is, you should look into tweening engines. They will save you a lot of hard work.
Now that I’ve got the main bulk of my site done, I hope I can finish it before classes start. ![]()
Adobe® Flash® Player 10, code-named “Astro,” introduces new expressive features and visual
performance improvements that allow interactive designers and developers to build the richest and most immersive Web experiences. These new capabilities also empower the community to extend Flash Player and to take creativity and interactivity to a new level.
Wow, this is great news. The features list is very impressive. I am especially excited GPU acceleration support. That means greatly improved performance since on previous versions, everything was handled by the CPU alone.
- 3D Effects - Easily transform and animate any display object through 3D space while retaining full interactivity. Fast, lightweight, and native 3D effects make motion that was previously reserved for expert users available to everyone. Complex effects are simple with APIs that extend what you already know.
- Custom Filters and Effects - Create your own portable filters, blend modes, and fills using Adobe® Pixel Bender™, the same technology used for many After Effects CS3 filters. Shaders in Flash Player are about 1KB and can be scripted and animated at runtime.
- Advanced Text Layout - A new, highly flexible text layout engine, co-existing with TextField, enables innovation in creating new text controls by providing low-level access to text offering right-to-left and vertical text layout, plus support for typographic elements like ligatures.
- Enhanced Drawing API - Runtime drawing is easier and more powerful with re-styleable properties, 3D APIs, and a new way of drawing sophisticated shapes without having to code them line by line.
- Visual Performance Improvements – Applications and videos will run smoother and faster with expanded use of hardware acceleration. By moving several visual processing tasks to the video card, the CPU is free to do more.
And this of course means that Flash CS4/10 will soon follow. And that’s what I will be waiting for like a child on Christmas Eve.
http://labs.adobe.com/technologies/flashplayer10/
Demos. The Flash demo is not much, but the videos at the bottom of the page are well worth a watch. You need to download and install the beta player, and I have no idea how stable it is.
I was just getting the hang of creating liquid layouts in AS2.0 a few months ago, and boy, is it quite a concept to grasp. Now I have to relearn everything I learned using AS3.0.Thankfully, once I understand the concept, all I have to do now is do it with unfamiliar syntax.
In this little tutorial, I’ll show AS2 and AS3 code showing the same end result. This is just very basic, just showing the differences between the two (which isn’t much), and to show how to get started with creating liquid layouts.
By the way, liquid layouts are layouts that change dynamically according the stage’s size. Not unlike liquid in a container, which takes the container’s size and shape, thus the name.
The movie shows 4 boxes I drew on four sides of the stage, changing position according to the stage’s size. Obviously, you could also adjust other properties of the MovieClip, like scale, alpha, rotation, etc.
First, the AS2.0 code:
[sourcecode language='jscript']Stage.scaleMode = “noScale”;
Stage.align = “TL”;
setStage();
var stageListener:Object = new Object();
Stage.addListener(stageListener);
stageListener.onResize = function() {
setStage();
};
function setStage() {
var WIDTH:Number = Stage.width;
var HEIGHT:Number = Stage.height;
box1._x = WIDTH-box1._width;
box1._y = HEIGHT/2-(box1._height/2);
box2._x = WIDTH/2 - (box2._width/2);
box2._y = 0;
box3._x = 0;
box3._y = box1._y;
box4._x = box2._x;
box4._y = HEIGHT - box4._height;
}[/sourcecode]
AS3.0:
[sourcecode language='jscript']
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
setStage();
stage.addEventListener(Event.RESIZE, stageResize);
function setStage():void{
var WIDTH:Number = stage.stageWidth;
var HEIGHT:Number = stage.stageHeight;
box1.x = WIDTH - box1.width;
box1.y = HEIGHT/2 - (box1.height/2);
box2.x = WIDTH / 2 - (box2.width/2);
box2.y = 0;
box3.x = 0;
box3.y = box1.y;
box4.x = box2.x;
box4.y = HEIGHT - (box4.height);
}
function stageResize(e:Event):void{
setStage();
}
[/sourcecode]
So, there isn’t really much difference between the two. AS3 is easier to understand because of its better event handling methods.
A little explanation for the 2 codes above, since they are quite similar. The first 2 lines are very important. Basically, they are telling the player to not do anything to objects on the stage when the stage is resized, because we want to control everything that happens when the stage is resized by code. Without those lines, the movie won’t work as expected.
The setStage() function is pretty self explanatory, it is where we do all the positioning of the movieclips. I like to put all of the code that does the positioning, resizing, etc. work in a function (preferably rolled into one), so I could call it at least once anytime I want. This is useful when initializing the movie, where all the movieclips might not be in their right place. And it is easier to put into the listener function too. You could also do it in the listener function, but I don’t recommend it.
We then call the setStage() function at least once, to position our movieclips where they should be, because when I created them in Flash, they are pretty much all over the place. If we don’t call that function, then they’ll only fall into place when we start resizing the stage.
And now to the part where the two codes are most different. Adding listeners to the stage. In AS3, it is quite straightforward. We add a listener, in this case stageResize() and listen to RESIZE events, to the stage object, which does nothing but call setStage(). You could also add other functions in there if you want to do something else when the stage resizes. In AS2, we have to create a listener object, tell that object to listen for the resizing event and execute the setStage() function. Again, you could add other functions in there.
So, there you have it. A basic Flash liquid layout. I hope this helps anyone who is having a hard time understanding this concept (I know I did). Now, this tutorial only showed changing the position of movieclips, by assigning values to them. But you could also change their position and/or size by percentages. Like 30% of the stage (I know this tutorial shows applying 50% of the stage), so you could adjust the visual elements of your movie to fit any size of resolution properly, at a limit of course.
NOTE: Notice the capital ‘S’ in Stage in the AS2 code and the small ’s’ in the AS3 code. Don’t mess those up!
Here are the source files of this tutorial.
So in this blog, I’ll be posting things I learn each day (hopefully), about programming, life, etc. The things I post here might not be completely correct or true, but they are what I learned and I post them as I understand them. Corrections would be very much appreciated.
I’ll call it the [Learn] series.
NOTICE: I am telling this as how I understand it from reading other tutorials on the web. This is possibly very inaccurate, but maybe you could understand things you haven’t understood before by reading how I understand it. :-/
Event handling in AS3.0 is very different from AS2.0. One of my most used events is onEnterFrame events.
In AS2.0, animating a simple box to move to the right every frame would look like this:
(please bear with me and the unformatted code)
[sourcecode language='js']box.onEnterFrame = function(){
this._x += 1; //execute this code everytime the box movieclip enters a frame.
}[/sourcecode]
but in AS3.0, it is a little longer, and I may still have to see the real benefits of this. But already, I am liking how easy it is to understand.
[sourcecode language='js']function moveBox(e:Event):void{
this.x += 1;
}
box.addEventListener(Event.ENTER_FRAME, moveBox);[/sourcecode]
the addEventListener method tells the box MovieClip to execute the function moveBox, everytime an ENTER_FRAME event is generated(which is all the time).
Notice the moveBox function has an Event parameter. When a function has an Event type parameter, it becomes a listener function. Passing a non-listener function to the addEventListener method causes an error. You could also add the moveBox listener to any other MovieClip you might have on stage, already one of the benefits of the new event handling of AS3.0.
There are a lot more events to discuss, but I hope this helps those who have just started converting to AS3 (like me). I’ll keep on posting more things I learn.
I am currently reading a tutorial on AS3.0 with Flash CS3 by one of my favorite ActionScripters. I would love to learn it on Flex (the Flash interface sucks), but I just got too comfortable with using objects on stage as instances for the code on AS2.0.
The great thing about this tutorial is that it has comparisons with how it used to be on AS2.0, and shows code on how it is on AS3.0. And so far it is very effective if you have a background in basic ActionScript. Coupled with a video tutorial from Lynda.com I ‘downloaded’, I think I could now completely switch to AS3.0!
I just love how similar it is to Java syntactically.
Here’s the tutorial: Getting started with AS3.0 with Flash CS3
performance improvements that allow interactive designers and developers to build the richest and most immersive Web experiences. These new capabilities also empower the community to extend Flash Player and to take creativity and interactivity to a new level.