Archiv für die Kategorie ‘Flash’

Lightbox-o-rama

Freitag, 15. August 2008
Wer hätte gedacht, dass es bereits zig verschiedene Lösungen zum Thema Lightbox (Website wird kurzzeitig überlagert durch eine weitere Ebene mit Inhalten, wie z.B. Detailansicht eines Fotos) gibt? Ich jedenfalls nicht, bevor ich den Artikel “Web 2.0 Round up Modal Window Lightbox Effect Libraries” von Komang a.k.a chazzuka gelesen hatte.

Ich hatte eigentlich gerade Tante Google mit dem Suchquery “modalWindow actionscript” gefüttert, um Näheres über diese offenbar un- oder schlecht dokumentierte Eigenschaft der Window-Klasse herauszufinden. Es kommt nämlich immer häufiger vor, dass sich Kunden eine Art Lightbox-Funktion auch in Flash-Websites wünschen. Obwohl es mit ActionScript natürlich massig Möglichkeiten gibt, so etwas umzusetzen, wollte ich im Zuge meiner Reise durch die Wunderwelt der Flash-Komponenten mal nachschauen, ob es da nicht auch etwas Passendes gibt.

Und siehe da: Es gibt so etwas. Meines Erachtens ist es recht einfach möglich, die in Flash verfügbaren so genannten modalen Fenster für eine Lightbox-Funktion zu benutzen. Das denke und weiß ich besonders, nachdem ich herausgefunden habe, dass man mit ActionScript Fenster erschaffen und den Hintergrund bzw. die Zwischenebene zwischen Fensterinhalt und dem durch die Lightbox zu verdeckenden Inhalt transparent gestalten und umfärben kann.

/**
 Window-Komponente in Library erforderlich!
*/
 
import mx.managers.PopUpManager;
import mx.containers.Window;
 
System.security.allowDomain("http://christianscholz.com");
 
_global.style.modalTransparency = 90;
 
var my_win:MovieClip = PopUpManager.createPopUp(this, Window, true, {closeButton:true, contentPath:"http://christianscholz.com/wordpress/wp-content/blutbad.jpg"});
 
var c:Color = new Color(my_win.modalWindow);
c.setRGB(0x000000);
 
var winListener:Object = new Object();
winListener.click = function(evt_obj:Object) {
 my_win.deletePopUp();
};
winListener.complete = function(evt_obj:Object) {
 my_win.setSize(my_win.content._width, my_win.content._height+25);
};
my_win.addEventListener("click", winListener);
my_win.addEventListener("complete", winListener);

Mit diesem Beispielskript, in ein Flash-Dokument eingefügt, wird die Bühne mit 90% opakem Schwarz überzogen (dafür sorgt _global.style.modalTransparency in Kombination mit der Farbwertzuweisung per Color-Klasse) und darüber ein Fenster erzeugt, das als Inhalt ein Bild aus meinem Blog trägt.

Das Ergebnis ist nichts Spektakuläres. Außerdem ist die Verwendung der Color-Klasse veraltet. Das aber beiseite gestellt lässt sich sagen, dass hier durchaus ein weiterer Weg gegeben ist, eine Lightbox-Funktion in Flash herzustellen. Am Rande sei noch bemerkt, dass Buttons/Movieclips, die unter der Lightbox liegen, stumm geschaltet werden, also nicht geklickt werden können, während die Lightbox aktiv ist. Dieses Verhalten ist aber in der Regel gewünscht und vorteilhaft.

DateChooser-Komponente

Donnerstag, 14. August 2008
Ich muss zugeben, ich war lange Jahre gegen die Verwendung von Komponenten in Flash. Diese Einstellung rührte noch aus der Zeit, als alle möglichen Flasherzeugnisse, die ich zu produzieren hatte, so klein (Dateigröße) sein mussten wie möglich. Die popeligste Komponente in einem Flashfilm einzusetzen, bedeutete gleich 30kb und (teils weit) mehr an Dateigrößenzuwachs, was seinerzeit den durch den Kunden gesetzten Rahmen gesprengt hätte.

Inzwischen sind wir alle im Jahr 2008 angekommen und halten dank schneller Internetverbindung Dateigrößen von mehreren hundert Kilobyte für vertretbar. Grund genug für mich, bei einem aktuellen Projekt (Flash-CMS) einen erneuten Blick in die Komponenten-Wundertüte zu werfen. Die Idee dabei ist natürlich, Zeit und Kosten zu sparen und gleichzeitig professionell funktionierende und ebenso aussehende Elemente verwenden zu können. (more…)

Eingabetextfelder

Donnerstag, 27. September 2007
Ich wollte nicht so recht glauben, dass es geht, daher habe ich es ausprobiert und bin positiv überrascht worden: Selbst statisch auf die Flashbühne gezeichnete Eingabetextfelder (und nicht etwa nur per ActionScript erzeugte) lassen sich per ActionScript  quasi “stummschalten”, so dass keine weiteren Eingaben ins Textfeld mehr möglich sind.

Für die Wandlung vom Eingabetextfeld hin zum dynamischen Textfeld sorgt die Eigenschaft type der Textfeld-Klasse.

Beispiel
Auf der Bühne wird ein schlichtes Eingabetextfeld aufgezogen. Als Instanznamen bekommt es ebenso schlicht tf. Ein beliebiger Button bekommt den Instanznamen b und wird ebenfalls auf die Bühne gelegt. In Frame 1 sorgt dann folgendes Skript dafür, dass zu Beginn zwar Eingaben in das Textfeld möglich sind, nach Klick auf den Button funktioniert das dann aber nicht mehr, da das Textfeld dann bereits ein dynamisches ist und somit keine Eingaben annimmt.

b.onPress = function () {
tf.type = “dynamic”;
}

Löschen von Intervallen ist tricky

Donnerstag, 10. Mai 2007
Es gibt ja in Flash seit einiger Zeit die Methode setInterval(), mit der sich wiederkehrende Abläufe recht flott umsetzen lassen und die, richtig eingesetzt, onEnterFrame-Konstrukte überflüssig machen können.

Rufen lassen sich diese hilfreichen Geister ganz einfach, aber man wird sie nicht so einfach los. Wird beispielsweise in einem Film B, der in einen Film A geladen wird, ein Intervall gestartet, reicht es nicht aus, Film B mittels unloadMovie() zu entladen — das Intervall wallt fröhlich weiter.

Ein pfiffiger Ansatz scheint mir der hier beschriebene zu sein.

Flash nervt (Teil III): Textfeld skalieren

Dienstag, 30. Januar 2007
Mir ist eben wieder so eine Eigenart von Flash aufgefallen, die mich zweifeln lässt, ob im Hause Macromedia vor Veröffentlichung des Produkts jemand “nochmal drüberschaute”, also sicherstellte, dass kein Schrott im Namen des Unternehmens auf den Markt kommt.

Entweder muss die Frage verneint werden, oder es gab so jemanden nicht vor Release der Version 8.

Ziehe ich per Text Tool einen Textfeldrahmen auf und möchte ihn später in der Breite oder Höhe noch anpassen, damit vielleicht mehr oder weniger Text hineinpasst oder diese Höhe- und Breitewerte ganzzahlig (z.B. 250px statt 250.8px ) sind, sehe ich primär zwei Möglichkeiten, dies zu erreichen:

1) “Anfasser” bei ausgewähltem Textrahmen benutzen.
2) Im Eigenschaftenfenster die Zahlen bei “W:” und “H:” eintragen.

Variante 1 hat den Nachteil, dass ich so keine ganzzahligen Werte “treffe”. Das gelingt nur (aber auch nicht auf Anhieb) bei 2000-prozentiger Vergrößerung der Ansicht.

Bei Variante 2 erhalte ich hingegen zwar die pixelgenaue Größe für mein Textfeld, muss aber leider in Kauf nehmen, dass die Schrift im Textfeld im fertigen Film gestreckt oder gestaucht angezeigt wird — boing!

Freizeilen von PHP nach Flash

Donnerstag, 25. Januar 2007
Vor einiger Zeit schrieb ich ja bereits über die Tücken der Sonderzeichen und Freizeilen in Bezug auf PHP und Flash (wer der große Schuldige ist, kann ich gar nicht recht sagen). Wenn ich den Artikel lese, erhalte ich am Schluss den Eindruck, dass ich die Probleme ein für allemal gemeistert hätte. Wie ich heute morgen herausfinden musste, befand ich mich mit dieser Annahme auf der nicht-metallischen Straße oder auch dem hölzernen Pfad…
Bei einem aktuellen Projekt werden Daten in HTML-Formularfelder eingegeben, per PHP in einer MySQL-Datenbank abgelegt und später von einem Flashfrontend angefordert. Dazu führt Flash eine PHP-Datei aus, die die Daten aus der Datenbank abholt und per echo-Befehl an Flash liefert. Im Grunde dasselbe Szenario wie Anno 2005. Doch im Gegensatz zu damals spielt es im vorliegenden Fall offenbar keine Rolle, dass ich die Daten (wie damals) per PHP-Skript in die Datenbank einspeise, denn aus einem Testeintrag…

Eine Zeile frei:

Zwei Zeilen frei:

Ende.

…wird in Flash 8…

Eine Zeile frei:
Zwei Zeilen frei:


Ende.

Wo eigentlich eine Zeile frei sein sollte, werden in Flash derer zwei angezeigt. Noch größer klafft die Lücke bei zwei gewünschten Freizeilen.

Warum ich seinerzeit ohne Skript-Manipulationen weitergekommen bin, ist mir heute schleierhaft. Aber ich habe eine Lösung gefunden, die hoffentlich auch beim nächsten Projekt noch funktioniert…:

Statt die Textdaten unverändert aus der Datenbank an Flash zu übergeben mit…

$send2flash = “copy=”.utf8_encode( $row['copy'] ).”&”;

…lasse ich per str_replace erst alle Vorkommen der Steuerzeichen #0D #0A oder Dezimal 13 10 — Erstgenanntes steht für Carriage Return, Letzteres für Line feed — durch ein einfaches \n ersetzen:

$transformedCopy = str_replace( “\r\n”, “\n”, $row['copy'] );
$send2flash = “copy=”.utf8_encode( $transformedCopy ).”&”;

Dann klappt es. Diesmal.

Keine Referenz auf AS-Textfelder vor Flashplayer 8

Dienstag, 16. Januar 2007
Lästig, lästig: Der Aufruf der Methode createTextField() gibt erst ab Flashplayerversion 8 eine Referenz auf das so erzeugte Textfeld zurück und unterscheidet sich daher in puncto Handlichkeit von den Methoden attachMovie() und createEmptyMovieClip().

In der Regel versuche ich, mir Tipparbeit und somit Zeit zu sparen, indem ich kurze Referenzbezeichner verwende, um die Eigenschaften eines per AS an eine Zeitleiste angehängten oder eines neu erzeugten Movieclips zu setzen.

Statt…

_root.attachMovie(”linkageName”, “unhandlicherNameDesTextfeldes”, 0);
unhandlicherNameDesTextfeldes._x = 100;
unhandlicherNameDesTextfeldes._y = 100;
// usw.

…schreibe ich eigentlich lieber…

mc = _root.attachMovie(”linkageName”, “unhandlicherNameDesMovieclips”, 0);
mc._x = 100;
mc._y = 100;

…, verwende also eine Referenz auf den angehängten Movieclip.

Und genau das ist bei createTextField() leider nicht möglich (die Methode liefert statt einer Referenz void zurück) — erst bei neueren Flashplayern.

Snowbot - Weihnachtsspiel in Flash

Freitag, 08. Dezember 2006
Mit meinem Kollegen Andreas aus der Comicbude habe ich ein Weihnachtsspielchen am Wickel, das kurz davor ist, fertig zu werden. Es trägt den schmissigen Titel Snowbot (danke, Regine! *g*).
Es läuft derzeit in einer Vorveröffentlichungsversion — “Beta” wäre zuviel gesagt — auf einem Testserver und kann gern mal ausprobiert werden: Snowbot Pre-Release.

Feedback / Bug reports / Wishlist für nächste Version erwünscht. :-)

GetURL, vars.send(), vars.sendAndLoad()

Donnerstag, 30. November 2006
So habe ich früher getestet, ob per POST an ein PHP-Skript übergebene Flashvariablen ankommen:
getURL (”ordner/phpskript.php”, “_blank”, “POST”);


Wenn heutzutage die Datenübergabe nicht auf Anhieb funktioniert mit…
vars.sendAndLoad (”ordner/phpskript.php”, vars, “POST”);

…versuche ich es ersatzweise erst mit…
vars.send (”ordner/phpskript.php”, “_blank”, “POST”);

Mit der send()-Methode kann ich nämlich den Inhalt meines LoadVars-Objektes an ein Browserfenster senden, mit sendAndLoad() würde ich nicht wissen, ob womöglich ein Fehler im PHP-Skript dem Vorgang einen stummen, aber effektiven Knüppel zwischen die Beine wirft.

Nachruf: Oxtrox - Raub der Sabrina

Donnerstag, 12. Oktober 2006
Vor einigen Jahren habe ich zur kurzweiligen Unterhaltung ein, wie soll man es nennen, Browser-Action-Rollenspiel gespielt, das schnell mal zwischendurch für einen Lacher und etwas Spannung gut war. Es trug den bescheuerten Titel “Oxtrox - Raub der Sabrina” und war in Flash5 umgesetzt gewesen. Man steuerte dabei seinen Character in Aufsicht durch ein zufällig generiertes Labyrinth, das von Monstern bevölkert war. Diese galt es natürlich um die Ecke zu bringen. So einfach das Spiel auch war, es hatte einige Pluspunkte, so dass ich mich wehmütig frage, warum es nicht mehr online verfügbar ist. Gibt man den Titel bei Google ein, landet man früher oder später bei Gamigo.de, wo aber zumindest für meine beschlagenen Äuglein nichts von dem Spiel zu finden ist. Im Netz gibt es lediglich noch ein paar (ver)alte(te) Spielhilfeseiten, die aber ohne Spielmöglichkeit auch keinen wirklichen Sinn ergeben.

Lustig fand ich an Oxtrox, dass man in der Highscoreliste die Todesursache der dort verzeichneten Helden und Heldinnen lesen konnte. So stand neben den anderen Daten, wie beispielsweise Klasse, Punktestand und erreichtes Level, auch etwa zu lesen “fiel einem klappernden Skelett zum Opfer” oder “ist erbärmlich verhungert”.

Natürlich gab es in diesem Spiel die obligatorischen Türen und Schatzkisten. Aus viel mehr bestanden die Labyrinthe nicht. Hier und dort konnte man Gegenstände und Gold finden, die bei selten auftauchenden Händlern auch eingetauscht werden konnten.

Die Gegenstände hatten die teils unangenehme Eigenart, unbekannte Wirkung zu haben. Außerdem konnte es passieren, dass man auf einen verfluchten Gegenstand traf und mit üblen Nebeneffekten leben musste.

Der Character konnte verlorene Gesundheitspunkte einerseits leicht durch Verstreichenlassen von Zeit (Leertaste drücken) wieder herstellen, musste aber auf der anderen Seite hin und wieder etwas essen, was wiederum bedeutete, sich im Labyrinth weiter vorzuwagen, um an Nahrung oder Gold für Nahrung zu gelangen.

Mir ist es nie gelungen, bis zum Spielziel vorzudringen; Sabrina blieb verschollen. Aber dank des tollen Spielprinzips habe ich es seinerzeit viele Male probiert.
Schade, dass es das Spiel nicht mehr gibt.