Senden Sie die Grüße der Saison mit einer Flash-Piano-Weihnachtskarte

Müde von den altmodischen animierten Weihnachtskarten, mit dem Weihnachtsmann lacht, fliegt ein Schlitten in den Himmel mit einem Bündel von Bäumen und funkelnden Lichtern?

In diesem Jahr haben Sie keine Entschuldigung. Ich werde Ihnen zeigen, wie Sie eine virtuelle Tastatur bauen, die Jingle Bells spielt. Sie können sogar das Konzept erweitern und dem Klavier weitere Lieder und Noten hinzufügen.

Für dieses Programm verwende ich eine Kombination aus Tweenlite, Flex SDK, Flash IDE und Flash Develop.




Schritt 1: Neue Datei

Starten Sie Adobe Flash und erstellen Sie eine ActionScript 3 Flash-Datei.

Schritt 2: Eigenschaften

Öffnen Sie die Eigenschaften und setzen Sie die FPS auf 30 und die Bühnengröße auf 600 x 380px.

Schritt 3: Schicht 1

Benennen Sie Ebene 1 in "Hintergrund" um und erstellen Sie ein weißes Rechteck von 580x360. Konvertieren Sie es in ein Movieclip-Symbol mit dem Namen "frame_mc" und setzen Sie seine Position auf x: 10 y: 10.

Schritt 4: Schlagschatten

Fügen Sie einen Schattenfilter mit den folgenden Parametern hinzu:

Schritt 5: Tastaturebene

Fügen Sie eine neue Ebene mit dem Namen "keyboard" hinzu, erstellen Sie ein primitives Rechteck 60x190 mit einem Eckenradius von 5 Pixel und ohne Strich. Mach ein Movieclip-Symbol und nenne es "keybase_mc".

Schritt 6: Reflexions- und Glutschichten

Drücken Sie die Taste F8 und erstellen Sie einen neuen Movieclip mit dem Namen "key_mc". Erstellen Sie zwei weitere Ebenen in key_mc (außer der bereits mit keybase_mc vorhandenen Ebene). Nennen Sie sie: "Reflexion" und "Glühen". Kopieren Sie den Rahmen in die neu erstellten Ebenen.

Schritt 7: glow_mc

HINWEIS: Ich habe die Farben von frame_mc für eine Weile geändert, damit ich die Änderungen an den Tasten sehen kann. Wählen Sie den Movieclip in der Glow-Ebene aus, nennen Sie ihn "glow_mc", öffnen Sie die Filter und bearbeiten Sie sie entsprechend dem folgenden Bild:

Schritt 8: reflect_mc

Wählen Sie den Movieclip in der Reflection-Ebene aus, nennen Sie ihn "Reflection_MC", öffnen Sie die Filter und bearbeiten Sie sie entsprechend dem folgenden Bild:

Schritt 9: base_mc

Wählen Sie nun den Movieclip in der Basisebene aus, nennen Sie ihn "base_mc", öffnen Sie die Filter und bearbeiten Sie sie entsprechend dem folgenden Bild:

Schritt 10: Schlüssel

Kopieren Sie den Schlüssel und fügen Sie ihn ein, bis Sie 7 Instanzen haben. Ordne sie gleichmäßig auf der Bühne an.

Schritt 11: Ausrichten

Öffnen Sie das Ausrichtungswerkzeug und klicken Sie auf das Symbol "horizontaler Abstand".

Schritt 12: Hinweise

Erstellen Sie eine neue Ebene, nennen Sie sie "Notizen". Dann schreibe auf C D E F G A B Auf den Tasten fügen Sie den Text einem neuen MovieClip hinzu. Öffnen Sie die MovieClip-Filter und bearbeiten Sie sie wie das folgende Bild:

Schritt 13: Zahlen

Erstellen Sie eine neue Ebene, nennen Sie sie "Zahlen". Schreiben Sie die Zahlen von 1 bis 7. Dies stellt die Zahlen dar, die Sie auf Ihrer Tastatur drücken, um die Ecard-Taste hervorzuheben.

Schritt 14: Flex-SDK-Pfad

Gehen Sie zu Bearbeiten> Voreinstellungen> ActionScript> ActionScript 3.0-Einstellungen und suchen Sie den Flex-SDK-Pfad (Sie benötigen diesen, um Dateien direkt in den Code einzubetten)..

Schritt 15: Flash entwickeln

Öffnen Sie Flash Develop (Ich verwende dies nur, weil es mir beim Schreiben von Paketen so viel mehr gefällt als dem üblichen ActionScript-Editor aus der Flash-IDE) und erstellen Sie 2 leere AS3-Dateien. Nennen Sie sie "Main.as" und "Background.as" und speichern Sie sie im selben Ordner wie Ihre .fla.

Schritt 16: Dokumentenklasse

Legen Sie in Flash IDE Main.as als Dokumentklasse fest.

Schritt 17: Autoplay-Taste

Erstellen Sie einen MovieClip für die automatische Wiedergabe, und nennen Sie ihn "autoplay_mc". Dies ist eine Autoplay-Schaltfläche.

Schritt 18: Schneeflocken

Um ein paar fallende Schneeflocken zu erzeugen, erstellen Sie einen neuen Movieclip, zeichnen Sie einen kleinen weißen Kreis und fügen Sie einen Verknüpfungsbezeichner für "SnowFlake" hinzu..

Schritt 19: Main.as

Definieren Sie in Flash Develop Main.as Ihre Main-Klasse, indem Sie einen Movieclip erweitern, und erstellen Sie eine Funktion namens Main.

Beginnen Sie mit dem Importieren dieser Klassen in Ihr Paket:

 import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.display.StageScaleMode; import flash.events.KeyboardEvent; import flash.utils.Timer; import com.greensock.TweenLite; import com.greensock.easing. *; Hintergrund importieren; // Wir werden eine Hintergrundklasse basierend auf Perlinrauschen und eine Transformationsmatrix zusammen mit ein paar ausgefüllten Formen erstellen, damit wir einen reibungslosen Übergang importieren können. // Ich habe gerade Kirupas Schnee gepackt und ihn verpackt -> http://troyworks.com/blog/2008/11/26/flash-kirupa-snow-in-as30/ import flash.media.Sound;

Schritt 20: Variablen

Definieren Sie in Ihrer Klasse diese Variablen:

 // Dies wird unser Hintergrund sein. private var _background: Background; // das wird unser Schneesturm sein privater var Schnee: Schnee; // -> Hinweise // Das Einbetten dieser Art erfordert FLEX SDK -> Alternativ können Sie diese Sounds zu Ihrer Bibliothek hinzufügen und ihnen eine Verknüpfungs-ID hinzufügen. [Embed (source = "assets / A.mp3")] private var A: Klasse; private var a: Sound = neues A () als Sound; [Embed (source = "assets / B.mp3")] private var B: Klasse; private var b: Sound = neues B () als Sound; [Embed (source = "assets / C.mp3")] private var C: Klasse; private var c: Sound = neues C () als Sound; [Embed (source = "assets / D.mp3")] private var D: Klasse; private var d: Sound = new D () als Sound; [Embed (source = "assets / E.mp3")] private var E: Klasse; private var e: Sound = neues E () als Sound; [Embed (source = "assets / F.mp3")] private var F: Klasse; private var f: Sound = neues F () als Sound; [Embed (source = "assets / G.mp3")] private var G: Klasse; private var g: Sound = neues G () als Sound; // Wenn Sie die Noten in einem Array speichern, wird die Verknüpfung mit den privaten Var-Notizen des Keyboards einfacher: Array = [c, d, e, f, g, a, b] // Notenfolge für das private private var noteSequence: Array = [f, f, f, f, f, f, f, a, d, e, f, g, g, g, g, g, e, e, d, b, a, f, d, c] // Aktuelle Note, die private var curnote spielt: Number = 0 // Verzögerungssequenz, die die Musik zwischen den Noten private var noteDelay haben muss: Array = [100, 100, 300, 100, 100, 300, 100, 100 , 100, 100, 200, 100, 100, 200, 90, 100, 90, 100, 120, 120, 120, 120, 300, 300] // Timer für das Abspielen des privaten Musik-Varietetimers: Timer = neuer Timer (noteDelay [0]);

Schritt 21: Main ()

Die Hauptfunktion

 // Die Hauptfunktion wartet darauf, dass das Maintimeline der öffentlichen Funktion der Bühne hinzugefügt wird. Main (): void addEventListener (Event.ADDED_TO_STAGE, addedToStage); 

Schritt 22: Initialisieren

Nachdem wir zur Bühne hinzugefügt wurden, initialisieren wir den Hintergrund und die virtuelle Tastatur:

 // Wenn wir der Bühne hinzugefügt werden, können wir einen Bühnenmaßstabmodus einstellen, den Hintergrund und den Start der privaten Funktion des virtuellen Pianos addedToStage (e: Event): void stage.scaleMode = StageScaleMode.NO_SCALE; addBackground (); startMachine (); 

Schritt 23: Hintergrundeffekte

Lassen Sie uns den sich bewegenden Hintergrund und den Schnee sortieren:

 // fügt die private Hintergrundfunktion addBackground () hinzu: void _background = new Background (150,150); // Der Grund dafür ist, dass die Größe kleiner ist, weil sie sehr CPU-intensiv ist. _background.x = 5; // um einen weißen Rand für den Rahmen festzulegen _background.y = 5; _background.width = 570 // skaliere die Größe auf die richtige Größe _background.height = 350 frame_mc.addChild (_background); // fügt Hintergrund zum Rahmen hinzu snow = new Snow (570, 350) // erstellt eine Schneesturminstanz

Schritt 24: Virtuelle Tastatur

Die Initialisierung der virtuellen Tastatur

 private function startMachine (e: MouseEvent = null): void // ordnet die Tastaturereignisse stage.addEventListener (KeyboardEvent.KEY_DOWN, onkeyDown) stage.addEventListener (KeyboardEvent.KEY_UP, onkeyUp) // der Autoplay-Schaltfläche autoplay_mc zu .addEventListener (MouseEvent.CLICK, startAutoPlay); autoplay_mc.buttonMode = true; // ordnet die Noten den Tasten var i: int = 0 zu, während (i < 7)  this["key"+i].note = notes[i] i++  //makes the highlight of the keys disappear lowlightKeys(); 

Schritt 25: Markieren Sie

Wir müssen eine Funktion erstellen, um die Hervorhebung von den Tasten zu entfernen:

 private Funktion lowlightKeys () var i: int = 0, während (i < 7)  TweenLite.to(this["key" + i].glow_mc, 0.5,alpha:0 ); i++  

Schritt 26: Wichtige Ereignisse

Lassen Sie uns nun die Ereignisse Key up und Key down behandeln:

 private Funktion onkeyDown (e: KeyboardEvent): void var i: int = 0 switch (e.keyCode) Fall 49: // Schlüsselcode für 1 i = 0 break; Fall 50: // Schlüsselcode für 2 i = 1 Pause; Fall 51: // Schlüsselcode für 3 i = 2 Pause; Fall 52: // Schlüsselcode für 4 i = 3 Pause; Fall 53: // Schlüsselcode für 5 i = 4 Pause; Fall 54: // Schlüsselcode für 6 i = 5 Pause; Fall 55: // Schlüsselcode für 7 i = 6 break;  Notizen [i] .play (); TweenLite.to (this ["key" + i] .glow_mc, 0.5, alpha: 1); // hebt den Schlüssel hervor private Funktion onkeyUp (e: KeyboardEvent): void var i: int = 0 switch (e.keyCode) Fall 49: i = 0 break; Fall 50: i = 1 Pause; Fall 51: i = 2 Pause; Fall 52: i = 3 Pause; Fall 53: i = 4 Pause; Fall 54: i = 5 Pause; Fall 55: i = 6 Pause;  TweenLite.to (this ["key" + i] .glow_mc, 0.5, alpha: 0); // lenkt den Schlüssel herunter

Schritt 27: Autoplay-Funktionen

So starten und stoppen Sie die automatische Wiedergabe

 private Funktion startAutoPlay (e: MouseEvent = null) curnote = 0; // Jedes Mal, wenn ich die automatische Wiedergabe beginne, setze ich die aktuelle Spielnote zurück. tunetimer.delay = noteDelay [curnote] * 3 // Dies erhöht die Verzögerung, die zuvor mit tunetimer.addEventListener (TimerEvent.TIMER, autoPlayTune) gesetzt wurde. // fügt dem Timer-Ereignis einen Listener hinzu jedes Mal, wenn der Timer ausgelöst wird tunetimer.start () // startet den Timer private Funktion stopAutoPlay (e: MouseEvent = null) tunetimer.stop () // stoppt den Timer tunetimer.removeEventListener (TimerEvent.TIMER, autoPlayTune) // entfernt den Timer Veranstaltung 

Schritt 28: Aktualisieren

Aktualisieren der virtuellen Tastatur zusammen mit der Musik

 private Funktion updateMachine (): void lowlightKeys (); // setzt die Tasten hervor. var i: int = 0, während (i < 7)  if (this["key" + i].note == noteSequence[curnote])  TweenLite.to(this["key" + i].glow_mc, 0.5,alpha:1 ); //if current note is the one associeated with the key then highlights it  i++  curnote++ //goes to next note if (curnote > noteSequence.length) curnote = 0; // setzt die aktuelle Note zurück stopAutoPlay (); // stoppt die automatische Wiedergabe

Schritt 29: Der vollständige Code

Hier ist der vollständige Code von Main.as

 package import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.display.StageScaleMode; import flash.events.KeyboardEvent; import flash.utils.Timer; import com.greensock.TweenLite; import com.greensock.easing. *; Hintergrund importieren; import Schnee importieren flash.media.Sound; public class Main erweitert MovieClip private var _background: Background; privater var Schnee: Schnee; [Embed (source = "assets / A.mp3")] private var A: Klasse; private var a: Sound = neues A () als Sound; [Embed (source = "assets / B.mp3")] private var B: Klasse; private var b: Sound = neues B () als Sound; [Embed (source = "assets / C.mp3")] private var C: Klasse; private var c: Sound = neues C () als Sound; [Embed (source = "assets / D.mp3")] private var D: Klasse; private var d: Sound = new D () als Sound; [Embed (source = "assets / E.mp3")] private var E: Klasse; private var e: Sound = neues E () als Sound; [Embed (source = "assets / F.mp3")] private var F: Klasse; private var f: Sound = neues F () als Sound; [Embed (source = "assets / G.mp3")] private var G: Klasse; private var g: Sound = neues G () als Sound; private var-Hinweise: Array = [c, d, e, f, g, a, b] private var noteSequence: Array = [f, f, f, f, f, f, a, d, e, f, g, g, g, g, g, e, e, d, b, a, f, d, c] private var curnote: Number = 0 private var noteDelay: Array = [100, 100, 300, 100, 100, 300, 100, 100, 100, 100, 200, 100, 100, 200, 90, 100, 90, 100, 120, 120, 120, 120, 120, 300, 300] private var-Tuner: Timer = neuer Timer (noteDelay [0]); public function Main (): void addEventListener (Event.ADDED_TO_STAGE, addedToStage);  private Funktion addedToStage (e: Event): void stage.scaleMode = StageScaleMode.NO_SCALE; addBackground (); startMachine ();  // fügt die private Hintergrundfunktion addBackground () hinzu: void _background = new Background (150,150); _background.x = 5; _background.y = 5; _background.width = 570 _background.height = 350 frame_mc.addChild (_background); Schnee = neuer Schnee (570, 350); frame_mc.addChild (Schnee);  private Funktion startMachine (e: MouseEvent = null): void stage.addEventListener (KeyboardEvent.KEY_DOWN, onkeyDown) stage.addEventListener (KeyboardEvent.KEY_UP, onkeyUp) autoplay_mc.addEventListener (MouseEvent.CLICK, startAutoPlay); autoplay_mc.buttonMode = true; var i: int = 0 während (i < 7)  this["key"+i].note = notes[i] i++  lowlightKeys();  private function lowlightKeys()  var i:int = 0 while (i < 7)  TweenLite.to(this["key" + i].glow_mc, 0.5,alpha:0 ); i++   private function onkeyDown(e:KeyboardEvent):void  var i:int=0 switch(e.keyCode)  case 49: i=0 break; case 50: i=1 break; case 51: i=2 break; case 52: i=3 break; case 53: i=4 break; case 54: i=5 break; case 55: i=6 break;  notes[i].play(); TweenLite.to(this["key" + i].glow_mc, 0.5,alpha:1 );  private function onkeyUp(e:KeyboardEvent):void  var i:int=0 switch(e.keyCode)  case 49: i=0 break; case 50: i=1 break; case 51: i=2 break; case 52: i=3 break; case 53: i=4 break; case 54: i=5 break; case 55: i=6 break;  TweenLite.to(this["key" + i].glow_mc, 0.5,alpha:0 );  //AUTO PLAY FUNCTIONS private function startAutoPlay(e:MouseEvent = null)  curnote = 0; tunetimer.delay = noteDelay[curnote] * 3 tunetimer.addEventListener(TimerEvent.TIMER, autoPlayTune) tunetimer.start()  private function stopAutoPlay(e:MouseEvent = null)  tunetimer.stop() tunetimer.removeEventListener(TimerEvent.TIMER, autoPlayTune)  private function autoPlayTune(e:TimerEvent)  if(curnote noteSequence.length) curnote = 0; stopAutoPlay (); 

Schritt 30: Hintergrundklasse

Nun zur Hintergrundklasse. Wir beginnen mit dem Importieren dieser Klassen…

 import flash.display.Shape; import flash.events.Event; import flash.display.Sprite; import flash.display.MovieClip; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.geom.ColorTransform; import flash.geom.Rectangle; import flash.geom.Point; import flash.geom.Matrix; import flash.filters.ColorMatrixFilter; import flash.display.GradientType; import flash.display.Graphics; import flash.display.InterpolationMethod; import flash.display.SpreadMethod;

Schritt 31: Variablen

… Dann definieren Sie die Variablen:

 // Noise private var dir: Array privater Variopunkt: Punkt privater Var bd: BitmapData; private var bmp: Bitmap; private var bdmultiply: BitmapData; private var bms: Sprite; private var rect: Rechteck private var cmf: ColorMatrixFilter; private var w: Number private var h: Number // Linearer Farbverlauf Fill private var gshape: Form private var gmetrics: Rechteck private var gmatrix: Matrix private var gtype: String private var gspread: String private var ginterpolation: String private var gcolours: Array private var galphas: Array private Variationen: Array // Solid Fill privates var sshape: Shape

Schritt 32: Anfangsfunktion

Hier ist die Anfangsfunktion:

 öffentliche Funktion Hintergrund ($ width: Number = 100, $ height: Number = 100) w = $ width h = $ height rect = new Rechteck (0, 0, w, h); Punkt = neuer Punkt (0, 0); dir = [neuer Punkt (1, 262), neuer Punkt (400, 262)]; // Dies ist nur, um der gesamten Phase einen soliden Hintergrund zu geben. initBackgroundSolid (); // Dies steuert den Helligkeitskontrast und die Sättigung des Rauschens. initColorMatrix (); // Es werden zwei Hintergrundgeräusche vorhanden sein, die sie initiieren. initBackgroundNoise (); // Ein Farbverlauf wird hinzugefügt, damit wir nicht gerendert werden ... (erhalten Sie? zu viel Lärm bringt Sie zum Stillstand? haha ​​... hmmm) initBackgroundGradient (); 

Schritt 33: initColorMatrix ()

Diese Funktion steuert den Helligkeitskontrast und die Sättigung des Rauschens. Es ist ein sehr leistungsfähiger Filter.

 private Funktion initColorMatrix (): void cmf = neuer ColorMatrixFilter ([2, 0, 0, 0, -20, // rot 0, 2, 0, 0, -20, // grün 0, 0, 2, 0, -20, // blau 0, 0, 0, 1, -20]); // alpha

Schritt 34: Einfarbige Hintergrundfarbe

Dieser soll der gesamten Bühne einen soliden Hintergrund geben.

 private Funktion initBackgroundSolid (): void sshape = new Shape (); sshape.graphics.beginFill (0x170a02,1) sshape.graphics.drawRect (0, 0, w, h); sshape.graphics.endFill (); addChild (sshape)

Schritt 35: Geräusche

Die Geräusche:

 private Funktion initBackgroundNoise (): void // erstes Rauschen bd = new BitmapData (w, h, false, 0); bmp = neue Bitmap (bd); bmp.smoothing = true; addChild (bmp); // zweites Rauschen, das das erste Rauschen durch einen Überlagerungsüberblendungsmodus überlappt bdmultiply = new BitmapData (w, h, false, 0); bms = new Sprite (); bms.addChild (neues Bitmap (bdmultiply)) addChild (bms) bms.blendMode = "overlay"; // stellt den Hintergrund so dar, dass sich das Geräusch zu bewegen scheint addEventListener (Event.ENTER_FRAME, renderBG); 

Schritt 36: Maske

Hier ist die Verlaufsmaske:

 private function initBackgroundGradient () // Dies ist eine grundlegende Verlaufsbox mit Alpha und um 90º gedreht, sodass sie von oben nach unten statt von links nach rechts beginnt. gshape = new Shape (); gmetrics = neues Rechteck (); Matrix = neue Matrix (); gtype = GradientType.LINEAR; gspread = SpreadMethod.PAD; ginterpolation = InterpolationMethod.LINEAR_RGB; gcolours = [0x170a02, 0x170a02]; Galphas = [0,1]; Gratios = [0, 255]; gmatrix.createGradientBox (w, h, (Math.PI / 180) * 90); gshape.graphics.clear (); gshape.graphics.beginGradientFill (gtype, gcolours, Galphas, Gratios, Matrix, gspread, ginterpolation); gshape.graphics.drawRect (0, 0, w, h); gshape.graphics.endFill (); addChild (gshape)

Schritt 37: Rendern

Es ist Zeit gerendert!

 private function renderBG (event: Event): void // aktualisiert die Geräuschrichtung dir [0] .x- = 1.5 dir [0] .y- = 0 // Hier können Sie mit dir [1] .x spielen - = 0 // Hier können Sie mit dir [1] .y - = 0 spielen. // Hier können Sie mit // spielen. Sie definiert die erste Hintergrund-Bitmap, die ein Perlin-Rauschen aufweist. Bd.perlinNoise (w, h, 2, 10, falsch, wahr, 7, wahr, dir); // Zeit zum Färben (Spiel mit diesen Werten) bd.colorTransform (rect, new ColorTransform (1, 0.7, 0.5)); // aplies die Änderungen des Helligkeitskontrasts und der Sättigung, die früher gemacht wurden: bd.applyFilter (bd, rect, point, cmf) // das andere Perlinrauschen bdmultiply.perlinNoise (w, h, 3, 21, false, true, 7, true, dir ) // die anderen Perlinrauschen-Collors bdmultiply.colorTransform (rect, neue ColorTransform (1, 0.6, 0.4)); 

Schritt 38: Hintergrundklasse abschließen

Hier ist die gesamte Hintergrundklasse:

 package import flash.display.Shape; import flash.events.Event; import flash.display.Sprite; import flash.display.MovieClip; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.geom.ColorTransform; import flash.geom.Rectangle; import flash.geom.Point; import flash.geom.Matrix; import flash.filters.ColorMatrixFilter; import flash.display.GradientType; import flash.display.Graphics; import flash.display.InterpolationMethod; import flash.display.SpreadMethod; public class Background erweitert MovieClip private var dir: Array privater Variopunkt: Punkt privater Var bd: BitmapData; private var bmp: Bitmap; private var bdmultiply: BitmapData; private var bms: Sprite; private var rect: Rechteck private var cmf: ColorMatrixFilter; private var w: Number private var h: Number private var gshape: Form private var gmetrics: Rechteck private var gmatrix: Matrix private var gtype: String private var gspread: String private var ginterpolation: String private var gcolours: Array private Var-Galphas: Array private var gratios: Array private var sshape: Shape öffentliche Funktion Hintergrund ($ width: Number = 100, $ height: Number = 100) w = $ width h = $ height rect = new Rechteck (0, 0, w, h) ; Punkt = neuer Punkt (0, 0); dir = [neuer Punkt (1, 262), neuer Punkt (400, 262)]; initBackgroundSolid (); initColorMatrix (); initBackgroundNoise (); initBackgroundGradient ();  private Funktion initColorMatrix (): void cmf = neuer ColorMatrixFilter ([2, 0, 0, 0, -20, // rot 0, 2, 0, 0, -20, // grün 0, 0, 2, 0 -20, // blau 0, 0, 0, 1, -20]); // alpha private function initBackgroundSolid (): void sshape = new Shape (); sshape.graphics.beginFill (0x170a02,1) sshape.graphics.drawRect (0, 0, w, h); sshape.graphics.endFill (); addChild (sshape) private Funktion initBackgroundNoise (): void bd = new BitmapData (w, h, false, 0); bmp = neue Bitmap (bd); bmp.smoothing = true; addChild (bmp); bdmultiply = new BitmapData (w, h, false, 0); bms = new Sprite (); bms.addChild (neues Bitmap (bdmultiply)) addChild (bms) bms.blendMode = "overlay"; addEventListener (Event.ENTER_FRAME, renderBG);  private Funktion initBackgroundGradient () gshape = new Shape (); gmetrics = neues Rechteck (); Matrix = neue Matrix (); gtype = GradientType.LINEAR; gspread = SpreadMethod.PAD; ginterpolation = InterpolationMethod.LINEAR_RGB; gcolours = [0x170a02, 0x170a02]; Galphas = [0,1]; Gratios = [0, 255]; gmatrix.createGradientBox (w, h, (Math.PI / 180) * 90); gshape.graphics.clear (); gshape.graphics.beginGradientFill (gtype, gcolours, Galphas, Gratios, Matrix, gspread, ginterpolation); gshape.graphics.drawRect (0, 0, w, h); gshape.graphics.endFill (); addChild (gshape) private Funktion renderBG (Ereignis: Ereignis): void dir [0] .x- = 1.5 dir [0] .y- = 0 dir [1] .x- = 0 dir [1] .y - = 0 bd.perlinNoise (w, h, 2, 10, falsch, wahr, 7, wahr, dir); bd.colorTransform (rect, neue ColorTransform (1, 0.7, 0.5)); bd.applyFilter (bd, rect, point, cmf) bdmultiply.perlinNoise (w, h, 3, 21, false, true, 7, true, dir) ; 

Schritt 39: Schnee

Die Schneeklasse gehört nicht mir, sie wurde von Troy Gardner geschrieben, ich habe sie einfach von der Zeitleiste an ein Paket angepasst, deshalb kommentiere ich den Code nicht. Erstellen Sie ein "Snow.as" und kopieren Sie diesen Code hinein.

 package import flash.display.MovieClip; import flash.events.Event; import flash.utils.Dictionary; öffentliche Klasse Snow erweitert MovieClip var snowflakes: Array = new Array (); var snowflakeProps: Dictionary = neues Dictionary (true); var max_snowsize: Number = .04; // Pixel var snowflakesCnt: Number = 150; var oheight: Anzahl; var owidth: Anzahl; öffentliche Funktion Snow ($ width, $ height): void owidth = $ width; oheight = $ height; // Menge für (var i: int = 0; ioheight + 10) dO.y = -20;  if (dO.x> owidth + 20) dO.x = - (owidth / 2) + Math.random () * (1,5 * owidth); dO.y = -20;  else if (dO.x<-20)  dO.x= -(owidth/2)+Math.random()*(1.5*owidth); dO.y = -20;      

Fazit

Meine musikalischen Fähigkeiten sind nicht die besten, die Musik klingt vielleicht etwas seltsam. Nun ja, mit diesem Tutorial sollten Sie jetzt in der Lage sein, Ihre eigenen Songs mit mehr Noten und verschiedenen Tönen zu erstellen :). Ich hoffe, dass Ihnen dieses Tutorial gefallen hat, finden Sie den kommentierten Code und die Versionen cs4 und cs3 in der zip-Datei. Danke fürs Lesen!