Gebruik maken van AsWing/AS3 met Haxe

Deze eenvoudige tutorial laat zien hoe de krachtige AsWing GUI bibliotheek wordt gebruikt in Haxe.

Voorbereiden van de externe Haxe Class bestanden

  • Download hier de laatste versie van AsWing/AS3;
  • Pak het ergens in een map uit;
  • Ga naar de AsWing/bin folder en verander de naam van AsWing.swc in AsWing.zip;
  • Pak AsWing.zip dan uit met je favoriete unzipper.

Je beschikt nu over 2 bestanden: catalog.xml en library.swf. Het gaat ons om library.swf.

  • Ga met een command prompt naar de directorie waar library.swf staat;
  • Voer dan uit:
    $ haxe --gen-hx-classes library.swf

Dit zal alle externe Haxe Class bestanden aanmaken in de subfolder hxclasses, die nodig is om AsWing in Haxe te gebruiken.

Let op : enkele van de gegenereerde definities dienen te worden aangepast, nl. op die plekken waar AS3 een '...' operator wordt gebruikt in de parameterlijst (addRow in org.aswing.ext.FormRow.hx bijvoorbeeld). Overal waar de compiler hierover klaagt, moet de '...' operator worden vervangen door het benodigde aantal optionele parameters.

Hier is een voorbeeld:

//AS3:
addRow(...columns): FormRow {
//Haxe:
addRow(?p1: Dynamic, ?p2: Dynamic, ?p3: Dynamic, ?p4:Dynamic, ?p5: Dynamic): FormRow {

Update 24 mei 2009 : Met Haxe 2.0.3 onder Windows XP zijn geen problemen meer gevonden met resterende '...' operatoren. YMMV

Zet een testproject op

Laten we nu een nieuw Haxe project opzetten om te testen:

  • Maak een nieuwe projectfolder en kopieer de hele gegenereerde org folder structuur er naartoe;
  • Maak ook een kopie van library.swf in de projectfolder; deze bibliotheek wordt door de compiler in het project opgenomen.

Maak een Hello.hx als volgt:

import org.aswing.JButton;
import org.aswing.JFrame;
import org.aswing.geom.IntDimension;

import flash.Lib;
import flash.display.Sprite;
import flash.display.StageScaleMode;

class Hello extends Sprite {
    public function new() {
        super();
        //create a frame
        var frame : JFrame = new JFrame( this, "HelloApp" );
        
        frame.setSize(new IntDimension( 200, 120 ) );
        //create a button
        var button:JButton = new JButton("Hello from AsWing in Haxe!");
        
        //add the button to the frame
        frame.getContentPane().append(button);
        
        //add the frame to the stage
        Lib.current.stage.addChild(this);
        this.stage.scaleMode = StageScaleMode.NO_SCALE;
        
        //show it!
        frame.show();
    }
    public static function main() {
        new Hello();
    }
}

Maak een Hello.hxml als volgt:
-swf Hello.swf
-swf-header 600:400:21:ffffff
-main Hello
-swf-lib library.swf
-swf-version 9

Compileer het nu als volgt:
$ haxe Hello.hxml

Als alles goed is gegaan, zou er nu een Flash bestand Hello.swf moeten zijn die een frame weergeeft met een button erin, met daarop de tekst: "Hello!".

Opmerking


Ik heb Haxe v1.19 moeten gebruiken, de oudere versies deden het niet. Er was een foutmelding ten tijde van het genereren van de AsWing Haxe Class bestanden.

Tip


Gebruik GUIBuilder van AsWing om complexe interfaces mee te ontwerpen. Sinds versie 1.4.2 kan deze ook Haxe code genereren! GUIBuider is hier te vinden.
version #6085, modified 2009-05-26 18:09:39 by mloots