CATEGORY


Incredible

Action Script 3 und damit Flash CS 3 wird der Hammer, so viel steht fest. Die Möglichkeiten scheinen ins Undendliche zu wachsen. Ich hab hier gerade mal die Flash 9 Public Alpha und Papervision3D Beta RC1, dennoch einfach die heftige Performance genießen. 8 Movies als Texturen auf Polyplanes mit jeweils 64Faces und das in Echtzeit mit 24 Bildern pro Sekunde, Quality Setting für den Player ist übrigens “BEST”.

Link zur Demo

Papervision3D Blog
Flash CS 3
Action Script 3.0 Livedocs

Kleines Update

Hab die unschönen Fehler bei der Textur beseitigt und die Spiegelung etwas raufgesetzt.



ASLib Repository

Ich verwende seit ein paar Jahren eine Library aus nützlichen AS 2 Klassen die mir vor allem helfen die Entwicklungszeit zu verkürzen und die Fehlerquote zu senken. Damit in Zukunft jeder davon profitieren kann, habe ich die proprietären Bestandteile ausgemistet und eine überarbeitete quelloffene Version erstellt. Im Moment fehlen noch die Open Source Lizenz, welche ich auf Grund der dutzenden Varianten noch nicht ausgewählt habe und eine schöne Doku, werde ich aber auch via SVN Repo nachliefern.

Hier der Link zum Repository: svn://impossiblearts.com/svn

Noch zur Erklärung, as3 ist eine Adpation der as2 Variante, allerdings noch sehr experimentell und daher noch nicht verfügbar. Ich werde für die Benutzung der wichtigsten Klassen auch Tutorials und Samples veröffentlichen, allerdings direkt hier im Blog und nicht via Repo. Das Repo-Browsen via Browser wird noch nachgereicht.



OSFlash Workflow

OSFlash Workflow

Momentan befinde ich mich bei der Portierung meiner AS 2.0 Lib auf Kompatibilität mit MTASC. Verwende dafür den oben dargestellten Open Source Workflow und Subversion für die Versionskontrolle. Neu für mich im Vergleich zum FAMES Modell ist die Verwendung der APACHE ANT Tasks, die normalerweise Java Programmierer nutzen um Make-Vorgänge auszuführen. Allerdings auch für Flash sehr praktisch und leicht zu benutzen.



Flash Debugger Build

Ein erster Screenshot des neuen Flash Debugger. Viele werden den SOS Debugger von Powerflasher kennen und ihn vor allem für die Möglichkeit des Online Debugging und wegen seiner Geschwindigkeit zu schätzen wissen.

Diesen Ansatz verfolgen wir hier weiter. Im Unterschied zur Powerflasher Lösung setzen wir aber auf eine C++ Umgebung um das Maximum an Performance zu garantieren. Zusätzlich zum einfachen “trace” ist es auch möglich die Objektbäume(importierten Klassen), die Movieclipstruktur und die Runtime Variablen in einem gewissen Umfang auszulesen und sogar Werte zu verändern.

Dazu existiert auf Clientseite eine AS 2.0 Klasse die statische Methoden zur Verfügung stellt um die Kommunikation über den Socket Server zu ermöglichen. Bei einem ersten Test wurde der komplette importierte Objektbaum mit rekursivem Durchlauf und XML Formatierung in für den Menschen nicht merkbarer Verzögerung übertragen, die erzeugte und verarbeitete Datenmenge entsprach hierbei ca. 33kb Klartext.

Mit diesem Beispiel sollen auch die Möglichkeiten aufgezeigt werden die sich hierbei ergeben. So ist es denkbar den/die Baum/Bäume in einem gemäßtigen Interval permanent zu aktualisieren.
Eine Komprimierung der Daten ist lokal zudem nicht notwendig, sollte aber bei der Möglichkeit einer Verschlüsselung der gesendeten Daten für das Live-Debugging dennoch denkbar sein.
Flash Debugger Build Screenshot



Flash Tutorium: Beispiele

Ich werde in diesen Post einige Files und Beispiele posten. Ihr könnt diese frei für eure Flashprojekte in der FH-Salzburg verwenden.

Zufallsschwarm:

Link zum .fla File
Link zum .swf File

Einfacher Preloader:

Link zum .fla File
Link zum .swf File

Broadcasting und Performance

Link zum .fla File
Link zum .swf File
Im .swf File ist nichts sichtbar, da nur für die Entwicklungsumgebung relevant, ist hier nur der Vollständigkeit halber angefürt

Extended PreloaderÂ

Link zum .fla File
Link zum .swf File



Flash: Welcher ist der beste Weg?

Aja… das leidige Problem mit objektorientierter Programmierung ist, dass sie so endgeil der Code aussieht, ein Minimum Abweichen vom Konzept, unweigerlich eine Depression des Programmierers zur Folge hat, weil er ja jetzt nicht mehr 100% durchgestylten Code hat, das ganze ist vergleichbar mit einem modischen Kurzhaarschnitt versus Vokuhila.

Um dem ganzen zu entgehen hab ich jetzt eine relativ einfache Lösung gefunden, der Code sieht so gut aus wie das Projekt groß ist. Es zahlt sich meiner Meinung nach nur aus richtig große Projekte wirklich durchzustylen, da es bei kleinen unter Umständen einfach zu lange dauert. Jetzt werden sicher viele schreien, Reusability, bla bla….. allerdings ist es nach meiner Erfahrung eher so, dass die kleinen Projekte sehr spezielle Lösungen fordern, die mit einer OOP Library nur ungenügend abgedeckt werden können.

Dazu gibts auch einen Artikel beim Bokel.

Wenn man jetzt speziell auf Flash sinnt, wird dies oft zu einem Murren über ActionScrpt 2 führen, da dies ja dann oberflächlich keinen Sinn mehr machen würde, zumindest für Miniprojekte. Stimmt nicht ganz, denn der unglaublich dirty Mix aus AS1 und AS2 hat auch manchmal sein gutes. Man kann sich das Beste aus 2 Welten holen und es funktioniert auch noch. Wer also einmal mit den Fehlern und Hindernissen von Flash und ActionScript seinen Frieden geschlossen hat, ist hier gut bedient.

Beispiel: Dynamisch geladenes und animiertes Menü, basierend auf einer XML Datei und JavaScript Aufruf an den Browser
[as]

stop();

import flash.external.*;

Stage.align = “TL”;

var x:XML;
var flashvars:Array;
var navitems:Array;

flashvars = new Array();
navitems = new Array();

// productive enviroment
flashvars["SRCFILE"] = _root.SRCFILE;
// debug enviroment
//flashvars["SRCFILE"] = “site/xml/navigation.xml”;

x = new XML();
x.ignoreWhite = true;
x.load(flashvars["SRCFILE"]);
x["link"] = this;
x.onLoad = function(success) {
if(success) {
for(var i:Number = 0; i < this.firstChild.childNodes.length; i++) {
this.link.navitems.push({maintitle:this.firstChild.childNodes[i].attributes.maintitle, subtitle:this.firstChild.childNodes[i].attributes.subtitle, uri:this.firstChild.childNodes[i].attributes.uri});
}
this.link.genNavigation();
} else {
trace(“navigation loading failed”);
}
}
function genNavigation():Void {
for(var i:Number = 0; i < navitems.length; i++) {

var tmpButton:MovieClip;
var tmpSpacer:MovieClip;

tmpButton = this.attachMovie(“button”, “button_” + String(i), i * 2 + 1);

if(i < (navitems.length – 1)) {
tmpSpacer = this.attachMovie(“spacer”, “spacer_” + String(i), i * 2);
}

tmpButton.headtitle.headtitle.text = navitems[i].maintitle;
tmpButton.subtitle.subtitle.text = navitems[i].subtitle;
tmpButton["uri"] = navitems[i].uri;

tmpButton.onRollOver = function() {
this.gotoAndPlay(2);
}
tmpButton.onRollOut = function() {
this.gotoAndPlay((10 – this._currentframe) + 11);
}
tmpButton.onReleaseOutside = tmpButton.onRollOut;
tmpButton.onRelease = function() {
flash.external.ExternalInterface.call(“loadcontent”, String(this.uri));
}

tmpButton.dummy._width = 110;

tmpButton._x = i * 120 + 5;
tmpButton._y = 30;

tmpSpacer._x = 120 + i * 120;
tmpSpacer._y = 25;
}
}

[/as]



Race Games: Chronometry

Wer Spiele in Flash produziert weiß, dass die Berechnung von Spieldauer über Framerate oder setInterval ausgeführte Methoden nicht sehr zuverlässig ist. Die Framerate pulsiert zu sehr und selbst eine Interpolation über 50 Durchläufe (50 Bildschirmrenderingvorgänge) ist nicht genau genug ein Durchschnittsergebniss für z.B: ein 1- minütiges Spiel zu liefern.

Damit fällt die bekannte Methode über Continue reading



Flash XMLSocket Verbindungen

Wie im vorigen Beitrag berichtet ist die XMLSocket Klasse und die daraus resultierende Streaming Verbindung alles andere als flott.

Was ich noch schuldig bin, ist eine Erklärung für dieses Verhalten.

Flash verwendet für die Verbindung das TCP-Protokoll, was ja laut Spezifikation nicht schlecht wäre (gesicherte Übertragung der Pakete, sowie korrekte Reihenfolge). Der Nachteil zu UDP Continue reading




© 2006 - 2012 Hannes Wolfgang Moser