Archive for the ‘AS2’ Category

AS2 + AS3 Draw a Dotted Rounded Corner Box

Wednesday, November 7th, 2007

So you might think that rounded corners is easy in as3 with the new drawing tools. This is only so true if you don’t want it dotted.

Thanks to senocular AS2 DashedLine.as which was easily converted to an as3 version DashedLine.as for as3 we can draw dotted lines and curves with actionscript. This left me with the task of using the quadratic drawing tools (no i didnt add a cubic curveTo to the Dashed line class) to draw circles (or quarters of circles, for the curners), which isnt the easiest, but i’ll spare you the details and simply say, its done!

Using Draw.curvedBox(obj, offsetX, offsetY, width, height, cornerRadius) we can draw into any graphics object (whether it be a normal Sprite.graphics or a DashedLine Object). This is essential as the Dashed line tool doesnt actually give us a fill, so we might need to draw a normal shape for the background.

import com.senocular.drawing.DashedLine
import com.tonp.utils.Draw
var dl = new DashedLine(this,1,5);
dl.lineStyle(3,0x000000,1);
Draw.curvedBox(dl,10,10,100,100,20)

to draw a curved corner box with a fill, or solid outline, send in mc.graphics as the first attribute (or just the mc in as2)

DashedLine.as for as3

Draw.as for as3

Draw.as for as2

So we can now do a box with curved corners in either AS2 or AS3 and in dotted or normal… phew!

Using Firebugs console.log in flash AS2 & AS3

Wednesday, November 7th, 2007

To use the excellent features of the firebug plugin for Firefox when debugging in flash, simply put this class in your ClassPath.

This will allow you to log Objects (yes it will iterate deep objects) log data which is externally loaded such as server requests. Overall it just makes life that little bit simpler.

Usage:

var obj:Object = {hi:”Hello World”, {hi_again:”Hello again”}}
console.log(obj)
console.debug(obj)
console.warn(obj)
console.info(obj)
console.error(obj)
console.assert(exp) – tests that expression is TRUE
console.dir(obj) – print an objects properties like in the DOM view
console.dirxml(xml)
console.group(name)
console.endGroup(name)
console.time(name)
console.endTime(name)
console.profile(name)
console.endProfile()

Download console.as ( for AS2 )

Download console.as ( for AS3 )

thanks to whomevers code i’ve cannibalized to get these, sorry i lost your links.

Simple AS2 Load Queue

Wednesday, November 7th, 2007

For some reason I’ve found it hard to find a simple and easy to modify Multiple Loader Class. Be it images, swfs, xml, or maybe a custom implementation like loading items into a “Screen” (a class i use for managing pages and transition), this load queue will tell the overall progress as well as individual progress for the item current loading.

Import com.tonp.utils.LoadQueue;var my_xml:XML = new XML();
 
var mc_drop:MovieClip = createEmptyMovieClip(“mc_drop”,1);
 
Var lq:LoadQueue = new LoadQueue();
 
lq.add(“image”, “images/1.jpg”, mc_drop, {});
 
lq.add(“image”, “xml/test.xml”, my_xml, {});
 
lq.onLoadInit = Delegate.create(this, onLoadInit);
lq.start()

Callback functions are fired by the LoadQueue Object are in two sections, events fired for the current item in the queue, and events for the overall progress of the queue:

Item Events

onLoadItemStart
onLoadItemError
onLoadItemProgress
onLoadItemComplete
onTotalLoadComplete

Overall Events

onLoadStart
onLoadProgress
onLoadComplete
onLoadError

The functions return attributes similar to the LoadMovie() Object where possible.

Download LoadQueue.as

AS2 Cast and attach a Custom MovieClip class

Wednesday, November 7th, 2007

One annoying thing that i found in as2 that has been fixed in as3 is the ability to write: new MyCustomClass() and then attach it to the stage. In AS2 there is no way to instantiate a class (which extends MovieClip) and have it parented to an existing MovieClip, unless you put it in the library with a linkage identifier, and assign the class to that asset. This is an arduous process if the clip doesn’t even require any assets drawn in the IDE.

A useful way to work around this is to have an empty movieClip in the library with a linkage of ‘empty’. Then to instantiate your custom class you must dynamically assign that class to the empty library asset with registerClass. If you then attach the ‘empty’ and cast it as your custom class type, bingo! you have your custom class instantiated on the stage.

registerClass( “empty”, MyCustomClass);

var mc:MyCustomClass = MyCustomClass(attachMovie(”empty”));

With correctly casting the attachMovie() you get correct typechecking and auto-completion in FlashDevelop. Remember, your custom class must extend MovieClip in the .as file

Reading XML as an Object Tree in AS2

Thursday, August 30th, 2007

I thought I’d throw up a few things I’ve been using in AS2 lately on projects, So my next few posts will be old AS2 tricks.

Flash often needs hit the server with variables and load in a response. Using the built in LoadVars and XML Object works, but can be improved on. E4X isnt available in AS2 but here’s a lame relative. Enter stage XMLObj class. You can reading XML as an object eg:

trace( xml._data.root.data.person.name ) >> tony

This is a much faster way to access data. The XMLObj extends the built in XML class but adds the _data property. It can also guess types of the xml data as to save you the time of casting your values such as booleans and numbers.

For example a node such as <data>false</data> would when accessed by the XML tree would be a string of “false”. if(“false”) evaluates to -true- not -false- meaning you must cast it check String(“false”).toUpperCase() == true. Numbers would need to be casted Number(“65”) otherwise using them will not work as expected, eg. “4” + 4 = 44 not 8.

Sending data to an XML or XMLObj is easily done using a LoadVars as follows:

var xmlo = new XMLObj();
xmlo.guessType = true;
xmlo.ignoreWhite = true;
xmlo.onLoad = function(success){
	if(success){
		trace(this._data.root.people.person[0].name); &gt;&gt; tony
		trace(this._data.root.people.person[1].name); &gt;&gt; tarwin
 
	}
}
var vars = new LoadVars();
vars.id = 45;
vars.sessionId = “e3ed3533232ccD”;
vars.sendAndLoad(“process.aspx”, xmlo, “POST”);

The LoadVars Object will send your variables to the server then route the data straight into the XMLObj where it is parsed and onLoad is called.

server response:

<root>
<people>
<person name="”tony”"></person>
<person name="”tarwin”"></person>
<person name="”poo”"></person>
	</people>
	<cars>
		<car _type="”array”">
	</car>
	<text>
		<!--[CDATA[this is a slab of text]]-->
	</text>
</cars>
</root>

Download XMLObj.as