Der Matrix-Effekt

Thema:
Der Matrix-Effekt
Description:
Dynamische Änderung mehrerer Textblöcke
Keywords:
Flash, duplicateMovieClip, Textblock, Matrix, Dynamisch
Author:
Daniel Streidt
Date:
16.08.2002
Doc-ID:
59-001
URL:
http://www.flashworker.de/tutorial/59/001.html
Version:
1.0
Änderungen:
Anforderungen:
Flash 5
Vorkenntnisse:
Flash Grundkenntnisse
ActionScript nützlich
Download:
PC: "matrix.zip", 17 kB
Einleitung
  Was bringt dieses Tutorial?

Wirrwarr-Matrix mit Textenthüllung
  Textblockmatrix 4x4 (manuell) erzeugen
  MovieClip zur Steuerung definieren
  Es erscheine STOP

Der Matrix-Effekt!
  Die Hauptelemente
  Die Aktionen
  Bemerkungen





Was bringt dieses Tutorial?

Inspiriert von Chrisitan Hofs Set Variable Tutorial stellte ich mir selber die Aufgabe, den "Matrix-Effekt" (spaltenweise fallende Zahlen) mit Flash MX nachzuahmen. Dabei entstanden auch andere interessante Experimente...

Als allgemeine Regel gilt hier:
- erzeuge eine Matrix aus Textblöcken in einem Bild (mit unterschiedlichen Textblockvariablen) bzw. einem MovieClip, welcher ein Textblock (inkl. Textblockvariable) enthält, der später durch ein Skript als Matrix vervielfacht wird
- einem leeren MovieClip, dessen Skript den Matrix-Effekt steuert
- die Geschwindigkeit des Falles (des gesamten Films und nicht der einzelnen Spalten) wird durch die Film-Bildrate bestimmt (ich benutze in den Beispielen zwischen 10-16 BpS)





Wirrwarr-Matrix mit Textenthüllung

Dieses einfache Beispiel füttert sechzehn Textblöcke kontinuierlich mit Buchstaben. Vier spezielle Felder stoppen bei bestimmten Buchstaben, wobei die anderen Felder weiterhin gefüttert werden, im u.a. Beispiel das Wort "STOP" in der dritten Reihe. Wer schon ein cooles Feeling haben möchte, der kann die Hintergrundfarbe auf Schwarz setzen und im Textblock die Textfarbe Hellgrün nehmen.


1. Textblockmatrix 4x4 (manuell) erzeugen

In Flash neuen Film erzeugen und im ersten Bild links oben einen Textblock erzeugen mit den Eigenschaften "Dynamisch", "nicht auswählbar", "ohne Textrahmen", "zentriert" und die Variable (nicht Instanzname!) "matrfeld".

Diesen Textblock mit der Maus (und gedrückter SHIFT und STRG-Taste für eine ausgerichtete Kopie) rechts nebendran duplizieren. Diese zwei Textblöcke markieren und genauso duplizieren und so haben wir die erste Reihe. Wir markieren diese erste Reihe und duplizieren die nach unten. Alle 8 Blöcke markieren und wiederum nach unten duplizieren, so daß wir nun 16 Textblöcke haben in einer 4x4 matrix.

Jetzt jeden Textblock einzeln markieren und dessen Variable "matrfeld" von links nach rechts und oben nach unten mit einer Zahl erweitern, d.h. matrfeld1, matrfeld2, matrfeld3, ..., matrfeld16.

Warum müssen wir das manuell machen? Weil wir leider die Textblockvariablen nicht dynamisch mit ActionScript benennen können.


2. MovieClip zur Steuerung erzeugen

Mit STRG-F8 oder Einfügen -> Neues Symbol erzeugen wir ein neues MovieClip, dessen Benennung zweitrangig ist. Und kehren gleich zum Hauptfilm zurück (auf "Szene 1" klicken)! Nun erzeugen wir eine Instanz (ohne Instanznamen) mit diesem leeren MovieClip auf der Bühne, egal wo.

Das leere MovieClip anklicken und das Aktionsfenster aufrufen.

Wir benutzen hier onClipEvent (enterframe) {}, bedeutet, daß die Aktionen darin jedesmal ausgeführt werden, wenn der MovieClip im aktuellen Bild ausgeführt werden. Wir haben nur ein Bild, insofern werden die Aktionen kontinuierlich ausgeführt.

Das Alphabet hat 26 (Groß)Buchstaben, also soll eine random-Funktion einen beliebigen Buchstaben(index) auswählen. Da ich hier die Zahl in ein entsprechendes ASCII-Zeichen umwandeln möchte, muß ich erstmal mit 65 addieren (da "A" dem ASCII-Code 65 entspricht) und anschließend mit String.fromCharCode() in ein String umwandeln:

_root.matrfeld1=String.fromCharCode(random(26)+65);

Mit einer Schleife werden alle Textblöcke ausgefüllt, anbei der komplette MovieClip-Code:
onClipEvent (enterframe) {
	for (i=1; i<17; i++)		// Felder von 1 bis 16 durchgehen
		_root["matrfeld"+i] = String.fromCharCode(random(26)+65);
}
Film jetzt testen!


Bem.: _root["matrfeld"+i] wird benutzt, um dynamisch den Variablennamen festzulegen. Bei jedem Schleifendurchgang ändert sich die Zuordnung eines beliebigen Buchstabens.


3. Es erscheine STOP!

Ich wollte nun daß bei erreichen der Buchstaben S, T, O und P in der dritten Reihe die Textblöcke nicht aktualisiert werden, also brauche ich den folgenden Code:
onClipEvent (enterframe) {
	for (i=1; i<9; i++)		// Felder von 1 bis 8 durchgehen
		_root["matrfeld"+i] = String.fromCharCode(random(26)+65);

	if (_root.matrfeld9 != "S")
		_root.matrfeld9 = String.fromCharCode(random(26)+65);
	if (_root.matrfeld10 != "T")
		_root.matrfeld10 = String.fromCharCode(random(26)+65);
	if (_root.matrfeld11 != "O")
		_root.matrfeld11 = String.fromCharCode(random(26)+65);
	if (_root.matrfeld12 != "P")
		_root.matrfeld12 = String.fromCharCode(random(26)+65);

	for (i=13; i<17; i++)		// Felder von 13 bis 16 durchgehen
		_root["matrfeld"+i] = String.fromCharCode(random(26)+65);
}




Weiter