Articles

Archive

FramescriptManager: insert code on your timeline at runtime

In an earlier post we showed you how to seperate design and code by keeping code off the timeline at all times. The method was to have designers add framelabels to the movieclips’ timeline and have the developers react to the flash playhead reaching this framelable by means of an Event. This created a clean seperation between the job of coders and the job of designers.

We used the TimelineListener class as an example in that earlier post. This post will show you how to take an alternative approach, without event listeners, but by means of injecting code in a frame at runtime by means of our FrameScriptManager and the MovieClip.addFramescript method.
Continue reading ‘FramescriptManager: insert code on your timeline at runtime’

Asynchronous queue demo with a LinkedList

This post will show you the principle of an asynchronous queue, demonstrating it with the LinkedList structure in our package, used as a Queue by making it’s datatype nl.dpdk.collections.core.IQueue.

An Asynchrounous Queue is a queue that is processed with asynchrounous operations. Instead of processing a Queue in synchronous fashion, where you would remove all items from the queue in a loop, the items are removed only when the previous operation has finished (succesfully or not). The time when this is handled is not known in advance, and is event driven rather than procedurally driven.

Most browser cannot handle more than a couple of simultaneous http requests from flash, and just trying to load them all at once (in a loop) is error prone. A queue is a lifesaver in a case like this.
Continue reading ‘Asynchronous queue demo with a LinkedList’

Timeline Events via the TimelineListener class

While viewing a post on bytearray.org and after teaching a class on creative technology at the avans hogeschool today, I got inspired to write some easy code to be informed by the timeline of a Movieclip when a certain label is reached.

A student of mine slapped me in the face with my own words that “code on the timeline is evil” when he asked how he could trigger an action inside the flash Document Class from the timeline or from a specific framelabel. My reply was simple: just call a method on a certain keyframe that you have exposed in the Document class. < Sssslappppp > :) So I decided to show him the clean way by listening to an Event.ENTER_FRAME Event and checking the framelabel or the end of the timeline whenever the event handler got called. All from inside the Document class, no code on the timeline there.

I encapsulated the whole thing in a class, have it dispatch events you can register to and make it able to get some data out of it and at the same time make it work for different scenes (as he was working with them). In this way we can perfectly seperate design and timeline stuff from code, optimizing workflow by having designers tweak their animations and killer design while only informing the developer of some framelabels and eliminating spaghetti code and potential bugs.

For this purpose I wrote the TimelineListener class in the nl.dpdk.utils package. read on for some simple code.
Continue reading ‘Timeline Events via the TimelineListener class’

Factory for creating ResultSet from an SQLResult in AIR

There is a minor update in the nl.dpdk.air package.

While creating some AIR applications, it turned out the SQLResult, a resultset wrapper used when working with a local SQLite database is not as powerful as we want it to be. Therefore we wrote a little Factory to convert an SQLResult to an nl.dpdk.collections.sets.ResultSet.

Our ResultSet is also used when doing flash remoting and when returning data from a remote database, (see the post about that here).
So it’s convenient to use when working with local data from a database as well. As an added bonus, it offers some more features than the very simple SQLResult, which is essentially an Array of anonymous objects.

The ResultSet makes use of our very powerful List datastructure, which features sorting (which is better done by the database), selecting, mapping, folding and applying commands as well as a very rich api where you can use the datastructure as a Queue or a Stack.
Continue reading ‘Factory for creating ResultSet from an SQLResult in AIR’

internal classes confuse cs4 compiler

We (and others) noticed that some stuff wouldn’t compile anymore under the new cs4 flash authoring tool. The compiler complained mostly with messages like ‘1020: Method marked override must override another method.’

Thanks to a post on this blog we found the following bug on bugs.adobe.com. As you can see, it turns out the compiler is wrong. It cannot handle internal classes (and our tests suggest this behaviour is erratic). This breaks backwards compatibility in a major way, but it seems Adobe didn’t catch this in their testsuites.

We started refactoring immediately by removing the internal classes from some of the classes that used them and at the moment everything is back to normal again. All tests passed. This is on top of an earlier refactoring where we tried to fix the issue by changing some stuff on interfaces and by introducing an abstract List type in the inheritance chain for LinkedList and ArrayList.

We’ll put up the new stuff somewhere this week.
We have put the new source code in the repository.

Using a flashvars / flash parameters registry: configure your flash files externally

Providing data to your flash movie can be done through javascript, through loading data from xml, UrlVariables (post and get) or flash remoting with the actionscript message format (amf), or by passing FlashVars to your movie at embed time in your html page. We are using a software design pattern known as a Registry to be able to have easy access to our externally provided parameters known as FlashVars throughout our application.

Continue reading ‘Using a flashvars / flash parameters registry: configure your flash files externally’

folding, mapping and applying commands on datastructures and collections

Hi, we have a great update on the collections package featuring methods that allow us to map the list, fold it and to apply commands on every item in the list. This sort of extremely powerful functionality can be compared in intention to using specifications on collections on which we wrote an earlier post here. Some more updates include some bugfixes in the unittests and a stack overflow problem occuring only on macs. But this article will focus on highlighting the high level methods we just added. Want to have a huge boost in productivity and clarity of code??? Read on!
Continue reading ‘folding, mapping and applying commands on datastructures and collections’

The collections package

The collections package has some classes in it that provide a very powerful way of storing, retrieving, selecting, sorting and manipulating data. It features well known datastructures like lists (both the double linked list version and the array list version, very useful for storing lists of like object instances, which is useful in almost every application you encounter), queues (very useful for getting things done in a specified order, first in first out or FIFO), stacks , deques ( double ended queue, can function as a stack and a queue), heaps, priorityqueue, set, resultset (very useful when using flash remoting and a database) and trees (for menus, games, searching etc., both binary and n-ary trees). It is a very comprehensive library, influenced by the Java collections package, with a clear interface, easy to use and very consistent throughout the different classes. Know one of them, know ‘em all.
Continue reading ‘The collections package’

Tracking user activities inside your application with the Tracker

In every campaign we create we implement some mechanism to measure what the user is doing with and within our application. After all, we want to see the results and be able to have a good analysis of the application’s efficiency. We use a variety of techniques, depending on the client’s wishes: Google analytics, webtrends, dmfacts or a custom implementation where we log stuff via our custom logging framework.

What all these implementations have in common is the necessity to be able to track stuff from within flash in a generic way. We only want to do a little customization for every application, while using the same method to track or log stuff in every application. For this purpose we created the nl.dpdk.log.statistics package.
Continue reading ‘Tracking user activities inside your application with the Tracker’

Open Source package released on dutch Adobe User Group

We have made a great step for Dutch interactive agencies by releasing some of the source code we work with (flash actionscript 3) to the general public.

The announcement was just made at the newly launched website of the dutch adobe user group and on our website (dutch).
Continue reading ‘Open Source package released on dutch Adobe User Group’