Archive for November, 2007

Best .NET AJAX… Hijax

Saturday, November 10th, 2007

Have you ever wanted to eliminate the page refreshes when altering a pages properties in .NET? I have.

The way .NET allows you to access the DOM in your code and quickly change control’s properties, visibility, validate values, it is amazing, but the only issue is the dreaded page refresh! When i first heard about .NET extensions which could make these DOM changes quickly and easily with AJAX, using a method called Jijax, i was amazed! Another important thing is that the Hijax method will degrade gracefully. This is to me, is the basis of treating a HTML site more like a my beloved Flash (or a RIA). The ability to build custom controls (like a class, of movieclip in flash) and then have them talk to each other, writing everything in a single language (c#) and (without a page refresh), make update changes. Beautiful. It also saves writing your application twice (for degredation)

enter Anthem.NET

It is a stable and elegant implementation for .NET and works well in VWD Express and VWD 2005. Check out the Anthem Examples to get a good idea of its functionality. I have found that it has the best documentation and community of the available frameworks. Other Hijax frameworks include comfort ASP and MagicAJAX.NET V0.3.0 altho i had stability issues testing them (it is probably my setup, give them a go). I found a good comparison of .NET Ajax helpful in comparing frameworks, altho be aware that it is written by the programmer who built comfort ASP.

To me these Anthem components are an essential part of the .NET framework, and more useful and elegant than the AJAX (Atlas) Extensions.

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