Archiv für die Kategorie ‘Flash’

ActionScript 3.0 != OOP

Montag, 02. November 2009
Ich muss mich selber über mich wundern, aber bis vor kurzem habe ich noch geglaubt, dass ich dem prozeduralen Programmieren abschwören müsste, sobald ich die aktuelle AS-Version 3.0 nutze. Es stellt sich aber heraus, dass ich Spaghetticode erschaffen und gleichzeitig AS 3.0-Syntax verwenden kann. Yay!

Doch, zugegeben, OOP wirkt nach meinen jüngsten zaghaften Schritten, die durch den Einsatz von Flex angenehm unterstützt worden sind, immer anheimelnder…

Flashanwendungen mit kyrillischen Zeichen

Montag, 31. August 2009
Davor habe ich mich jetzt ein Jahrzehnt lang gedrückt: Texte in Fremdsprachen in Flash abzubilden. Heute kam allerdings bereits die zweite diesbezügliche Kundenanfrage in kurzer Zeit, so dass ich mich mal etwas umgesehen habe. Für später notiere ich mir mal die gefundenen Stellen im Netz.

Eins

Zwei

Mit FlashVars aus HTML Daten an Flash weitergeben

Montag, 31. August 2009
Früher(?) war es ganz einfach. Wenn ich wollte, dass einem Flashfilm von außen — sprich: von der den Flashfilm umgebenden HTML- oder PHP-Seite — Variablen und Werte zur Verfügung gestellt werden sollten, suchte ich die zwei Stellen im Einbettungscode heraus, wo der Name der Flashdatei auftauchte, und ergänzte ihn um einen Querystring à la “?meineVariable1=wert1&meineVariable2=wert2“.

Das scheint heute nicht mehr ganz so einfach zu sein, jedenfalls nicht, wenn ich den Code von der Flash eigenen Publish-Funktion (Version: CS 4) verwende.

Vor einigen Jahren stand die Flashgemeinde kopf, als plötzlich der InternetExplorer Flashinhalte auf Internetseiten zunächst nur als Rahmen anzeigte und erst nach Klick die Filme richtig startete. Aus Sicherheitsgründen, hieß es. Seit diesem unheilvollen Tag sind zig Lösungen entstanden, wie man Flashfilme so einbettet, dass auch der IE ordentlich mitspielt.

Mit jeder neuen Flashversion scheint sich der Code zu verlängern und undurchschaubarer zu werden, der durch die oben erwähnte Publish-Funktion ausgeworfen wird.

In einem Test vorhin wurden die gewünschten Daten erst korrekt im Flashfilm zur Verfügung gestellt, nachdem ich in der Javascript-Funktion AC_FL_RunContent eine Zeile wie diese hier eingebaut hatte:
'FlashVars','meineVariable=wert'

Was hier für Flash CS 3 geschildert wird, gilt für meinen Fall hingegen nicht mehr.

Nvidia — Speak Visual

Freitag, 08. Mai 2009
Nett gemachte Website mit schöner Video- und 3D-Einbindung in eine Flashsite.

Flash: Zeit im Format HH:MM:SS

Dienstag, 17. März 2009
Jetzt ist es tatsächlich mal erforderlich gewesen, für ein Flash-Projekt Videospieldauern im Format HH:MM:SS (Bsp.: 01:37:25) auszugeben, die ursprünglich in Form von Sekunden vorliegt. Hier meine Herangehensweise in plain old ActionScript.

 ActionScript |  copy code |? 
01
function getFormattedTime(timeInSeconds) {
02
	var hours 	= 0;
03
	var minutes 	= 0;
04
	var seconds 	= 0;
05
	var hourOutput 	= "";
06
	var minOutput 	= "";
07
	var secOutput 	= "";
08
	var output 	= "";
09
 
10
	hours 	= Math.floor(timeInSeconds/3600);
11
	minutes = Math.floor((timeInSeconds-(hours*3600))/60);
12
	seconds = Math.floor((timeInSeconds-(hours*3600))%60);
13
 
14
	if (hours<10) {
15
		hourOutput = "0"+hours;
16
	} else {
17
		hourOutput = hours;
18
	}
19
 
20
	if (minutes<10) {
21
		minOutput = "0"+minutes;
22
	} else {
23
		minOutput = minutes;
24
	}
25
 
26
	if (seconds<10) {
27
		secOutput = "0"+seconds;
28
	} else {
29
		secOutput = seconds;
30
	}
31
 
32
	output = hourOutput+":"+minOutput+":"+secOutput;
33
	return output;
34
}
35
 
36
trace(getFormattedTime(5845));

Flashspiel gegen Hacker sichern

Dienstag, 10. Februar 2009
Seit ich mit Flash arbeite (1998, seinerzeit Flash 3), beschäftigt mich die Frage, wie man es schaffen könnte, ein Flashspiel schummelsicher zu gestalten.

Oft werden mit Flash Spiele umgesetzt, bei denen es am Spielende darauf hinausläuft, den erzielten Punktestand in eine Highscoreliste einzutragen. Beim Übertragen des Punktestands (meist in Verbindung mit dem SpielerInnennamen) kommen in der Regel die aus HTML-Formularen bekannten HTTP-Request-Methoden POST oder GET zum Einsatz, um einem serverseitigen Skript die zu speichernden Daten zu übergeben.
Wenn man sich dazu vor Augen hält, dass ein Flashspiel üblicherweise clientseitig, also auf dem Rechner der/des Spielers/Spielerin liegt, dass das SWF-Format offen dokumentiert ist und dass es mehrere Programme gibt, die eine SWF-Datei dekompilieren können, kann man sich vorstellen, dass es nahezu unmöglich erscheint, Schummelsicherheit zu gewährleisten, zumal selbst die pfiffigste Verschlüsselungsmechanik quasi im Klartext für jedermann sichtbar ist, nachvollzogen und für ein gefälschtes Ergebnis eingesetzt werden kann.
Oft reicht es aus, beispielsweise mit dem Firefox-Plugin LiveHTTPHeaders die beim Speichern des Ergebnisses übertragenen Variablen und Werte zu überwachen und auszuprobieren, dem angesprochenen Auswertungsskript gefälschte Daten zu übermitteln.

Weil es so einfach ist, bei den meisten Flashspielen zu schummeln, habe ich in der Vergangenheit KundInnen immer dazu geraten, Flashspiele niemals mit hohen Gewinnen (”Erster Platz gewinnt ein Auto/1000 EUR/etc.”) anzubieten. Meist lief es auf eine Verlosung relativ niedrigpreisiger Gewinne unter den Top100 aller eingetragenen SpielerInnen hinaus. Das läuft zwar dem üblichen Gedanken zuwider, dass der erste Platz den größten Gewinn einstreichen sollte, bietet aber Hackern weniger Anreiz, das Spiel manipulieren zu wollen (natürlich kann ein böswilliger Hacker bei diesem Szenario auch einfach 100 gefälschte Ergebnisse senden, um seine Gewinnaussichten zu maximieren).

Ein paar Ideen zur Erhöhung der Sicherheit in Flashspielen finden sich in den Kommentaren zu diesem Artikel im “PHP Security Blog”. Diese Ideen — beispielsweise die Protokollierung jeder Mausbewegung und jedes Mausklicks während eines Spiels und deren Auswertung zur Verifizierung eines validen Ergebnisses — erfordern jedoch zumeist einen sehr hohen Entwicklungsaufwand, der zumindest meiner Erfahrung nach von KundInnen nicht bezahlt wird.

Weitere Links
Generate a keypair using OpenSSL
RSA Algorithm
Writing Encryption function in flash?
Creating more secure SWF web applications
RSA

ActionScript: “Hex nach RGB”-Konversion

Freitag, 19. Dezember 2008
Es gibt bestimmt schönere, schnellere, komfortablere Lösungen, aber meine hilft mir fürs erste.
Ich hätte gern den Rückgabewert der Funktion als “:Array” typisiert, aber dann meckert mich der Compiler an, weil ja als Rückgabe auch ein Boolean herauskommen kann. Was macht man in solchen Fällen nochmal? Hatte ich doch jüngst bei Colin Moock (seltsamer Name für einen Iren. Oder ist der am Ende gar keiner?) gelesen…
Zudem besteht die Rückgabe der Funktion in einem Array mit drei Elementen. Aber man kann sich ja jederzeit etwas anderes daraus formen, sollte es nötig werden. (more…)

Flash: Nach onLoadInit (MovieClipLoaderClass) eigene Funktion ausführen

Donnerstag, 18. Dezember 2008
Manchmal bin ich überrascht, wie leicht sich Probleme lösen lassen…

Vor wenigen Minuten erwuchs das Bedürfnis, zu unterschiedlichen Zeitpunkten im Ablauf eines Flashfilms verschiedene Daten (SWF, JPG) nachzuladen. Die naheliegende Herangehensweise war, ist und bleibt, dafür die in Flash/AS eingebaute MovieClipLoaderClass zu verwenden.

Ich wollte allerdings gern jeweils bestimmen können, was genau passieren soll, nachdem ein Ladevorgang abgeschlossen ist. Beispielsweise sollte im einen Fall ein SWF geladen und anschließend in dessen eigener Zeitleiste zu einem bestimmten Frame geleitet werden. In einem anderen Fall sollte ein JPG geladen und anschließend skaliert werden. (more…)

Flash: Zeitanzeige für Sounds und Videos im MM:SS-Format

Mittwoch, 10. Dezember 2008
Viele Eigenschaften, beispielsweise jene der Klasse “FLVPlayback”, werden Flash-EntwicklerInnen als Werte in Sekunden geliefert. Die Gesamtabspielzeit eines Videos und die aktuelle Abspielzeit sollen allerdings oft eher im Format “Minuten:Sekunden” (z.B. “02:37″) abgebildet werden.
Hier meine Herangehensweise, dies zu bewerkstelligen. Der aktuellere Artikel “Flash: Zeit im Format HH:MM:SS” ist besser geeignet.

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.

 ActionScript |  copy code |? 
01
/**
02
 Window-Komponente in Library erforderlich!
03
*/
04
 
05
import mx.managers.PopUpManager;
06
import mx.containers.Window;
07
 
08
System.security.allowDomain("http://christianscholz.com");
09
 
10
_global.style.modalTransparency = 90;
11
 
12
var my_win:MovieClip = PopUpManager.createPopUp(this, Window, true, {closeButton:true, contentPath:"http://christianscholz.com/wordpress/wp-content/blutbad.jpg"});
13
 
14
var c:Color = new Color(my_win.modalWindow);
15
c.setRGB(0x000000);
16
 
17
var winListener:Object = new Object();
18
winListener.click = function(evt_obj:Object) {
19
 my_win.deletePopUp();
20
};
21
winListener.complete = function(evt_obj:Object) {
22
 my_win.setSize(my_win.content._width, my_win.content._height+25);
23
};
24
my_win.addEventListener("click", winListener);
25
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.