Categories
AS3 Flash

AS3 – take one step at a time: step 1a

I’ve made a mistake, the code I original wrote doesn’t work (I’m glad nobody noticed it 😉 ). You can find the correct class here

My previous post is about my first step into ActionScript 3 (AS3) and in my case: trail and error is the best way to learn stuff.

But it takes some time to find out and sometimes it’s nice to have some help.

I found some help to fix this in the future : Patrick Mineault at 5 1/2 blog has created a AS2 to AS3 converter which you can test here and download here.

There is a web form to paste your code into and it will return your converted AS3 code (check it here).
There is also an command line exe in the zip file
I’m not very good at command line, so for your (and mine) convenience I will explain how to get the exe to work with a .BAT file (I work on a PC so the example only works on PC).

Download the zip file and extract it somewhere on your computer. In my case C:\tmp\convert
I’ve created to folders in the convert folder
C:\tmp\convert\input
C:\tmp\convert\output

and in the input folder I copied all the classes I’ve ever written.

Now create a file with a .BAT extension (in my case convert.bat) and it doesn’t matter where you put it, but I put it next to the convertas2as3.exe in C:\tmp\convert folder.

Open the file you just created and paste this in there:

pause
C:\tmp\convert\convertas2as3.exe -input "C:\tmp\convert\input" -output "C:\tmp\convert\output"

or adjust the path to the files you want to convert
save the file and open the .BAT file (in my case convert.bat) and all your classes you ever have written are converted to AS3…

Well as good as it get’s: it’s not 100 percent converted to AS3 but it helps you with most of your code, and helps you on your way to find the correct code.

example
take the code I translated in the previous post but now in a class file:

class nl.matthijskamstra.config.ConfigFile
{
	/**
	* Constructor 
	* To access and manipulate information about the boundaries of a SWF file.
	*/
	public function ConfigFile ()
	{
		// trace ("set flash to 'browser'-mode");
		_root._quality = "BEST";
		Stage.scaleMode = "noScale";
		Stage.showMenu = false;
		Stage.align = "TL";
	}
	/**
	* static function config.... same as above
	*
	* @usage   nl.matthijskamstra.config.ConfigFile.config ();
	*/
	static function config () : Void
	{
		var temp = new nl.matthijskamstra.config.ConfigFile ();
	}
}

and put it through the AS2 to AS3 online converter will become:

package  { 
class nl.matthijskamstra.config.ConfigFile
	import flash.ui.ContextMenu;
	import flash.display.Stage;
	{
		/**
		* Constructor 
		* To access and manipulate information about the boundaries of a SWF file.
		*/
		public function ConfigFile ()
		{
			// trace ("set flash to 'browser'-mode");
			_root._quality = "BEST";
			Stage.scaleMode = "noScale";
			Stage.showDefaultContextMenu = false;
			stage.align = "TL";
		}
		/**
		* static function config.... same as above
		*
		* @usage   nl.matthijskamstra.config.ConfigFile.config ();
		*/
		static public function config () : void
		{
			var temp = new nl.matthijskamstra.config.ConfigFile ();
		}
	}
	
}

this will not work without errors but will help you convert your AS2 code to AS3

package nl.matthijskamstra.config {

	import flash.display.MovieClip;	
	import flash.display.Stage;
	import flash.display.StageQuality;

	public class ConfigFile extends MovieClip {
		/**
		* Constructor 
		* To access and manipulate information about the boundaries of a SWF file.
		*/
		public function ConfigFile () {
			trace ('ConfigFile ')
			stage.quality = StageQuality.BEST;
			stage.scaleMode = "noScale";
			stage.showDefaultContextMenu = false;
			stage.align = "TL";
		}
		/**
		* static function config.... same as above
		*
		* @usage   nl.matthijskamstra.config.ConfigFile.config ();
		*/
		static public function config () : void
		{
			var temp = new nl.matthijskamstra.config.ConfigFile ();
		}		
	}

	
}

The config class that works!
package nl.matthijskamstra.config {
	
	import flash.display.MovieClip;	
	import flash.display.StageQuality;

	public class ConfigFile extends MovieClip {
		
		// Constants:
		public static var CLASS_REF = nl.matthijskamstra.config.ConfigFile;
		public static var CLASS_NAME : String = "ConfigFile";
		public static var LINKAGE_ID : String = "nl.matthijskamstra.config.ConfigFile";
		
		/**
		* Constructor
		* 
		* @usage   	import nl.matthijskamstra.config.ConfigFile; // import
		*			var __ConfigFile__ : ConfigFile = new ConfigFile ( this );
		* @param	$target_mc		a reference to a movie clip or object
		*/
		public function ConfigFile( $target_mc:MovieClip = null ) {
			// trace ( '+ ' + LINKAGE_ID + ' class instantiated');
			$target_mc.stage.quality = StageQuality.BEST;
			$target_mc.stage.scaleMode = "noScale";
			$target_mc.stage.showDefaultContextMenu = false;
			$target_mc.stage.align = "TL";
		}
		
		/**
		* static function config.... same as above
		*
		* @usage  	nl.matthijskamstra.config.ConfigFile.config(this);
		* 			ConfigFile.config (this);
		* @param	$target_mc		a reference to a movie clip or object	
		*/
		static public function config ($target_mc:MovieClip ) : void {
			var __config = new nl.matthijskamstra.config.ConfigFile ($target_mc);
		}
		
	} // end class
	
} // end package

I’m sorry for adding to the confusion which happens when you learn ActionScript 3!
The Stage class is a difficult change from AS2 to AS3, when I have some time I will explain.

Categories
AS3 Flash

AS3 – take one step at a time: step 1

I finally started programming with ActionScript 3 (AS3); I know, I not a early adopter… 😉

And the first steps in AS3 are as uncomfortable as the first time I started OOP programming … or when I started moved from AS1 to AS2…

Since I started working for NOISE 5 months ago and moved to Amsterdam, I haven’t had time to do learn AS3.
That luckily has changed 🙂 and I started learning the basics.

And the first obstacle I ran into was something very simple: I always use a basic document (FLA) with default library items, some layers I always use and some ActionScript code to align the stage:

_root._quality = "BEST";
Stage.scaleMode = "noScale";
Stage.showMenu = false;
Stage.align = "TL";
stop ();

I have this also in a class (AS2), so I thought it would be useful to rewrite this class in AS3.
and I wanted to use this in my new as3 files too… (remember that this is the first thing a tried)

First you need to create a document class:

Document Class
And in my case my document class was: ‘Main’


package  {

	public class Main {
		
		public function Main() {
			trace ('Main')			
		}
		
	}
	
}

(package generated by FlashDevelop)

Code didn’t pass; I got a Compiler Error:
5000: The class 'Main' must subclass 'flash.display.MovieClip' since it is linked to a library symbol of that type.


package  {

	public class Main extends MovieClip {
		
		public function Main() {
			trace ('Main')			
		}
		
	}
	
}

I got some new errors:

  1. 1017: The definition of base class MovieClip was not found.
  2. 5000: The class ‘Main’ must subclass ‘flash.display.MovieClip’ since it is linked to a library symbol of that type.

So I added import flash.display.MovieClip;


package  {

	import flash.display.MovieClip;
	
	public class Main extends MovieClip {
		
		public function Main() {
			trace ('Main')
		}
		
	}
	
}

Ahhh and now we can get the stage to work with my ‘old code’, let’s paste it into the new document:


package  {

	import flash.display.MovieClip;
	
	public class Main extends MovieClip {
		
		public function Main() {
			trace ('Main')
			_root._quality = "BEST";
			Stage.scaleMode = "noScale";
			Stage.showMenu = false;
			Stage.align = "TL";
			
		}
		
	}
	
}

Auw: both _root and Stage doesn’t excited no more: I got an migration error


package  {

	import flash.display.MovieClip;	
	import flash.display.Stage;
	import flash.display.StageQuality;
	
	public class Main extends MovieClip {
		
		public function Main() {
			trace ('Main')
			stage.quality = StageQuality.BEST;
			stage.scaleMode = "noScale";
			stage.showDefaultContextMenu = false;
			stage.align = "TL";
		}
		
	}
	
}

And at last it works…
The only thing now to do, is to put it in the correct package.