Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-12-2007, 18:13   #1 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.043
[Stuff]Einmal global warming bitte...

hallo.

Vorab muss ich bemerken, dass sich die Anwendungsbereiche dieses Stuff (ein Glück gibt's davon keine Einzahl) in Grenzen halten, aber vlt. braucht es trotzdem irgendjemand mal irgendwann.

...neulich blieb mein Opera Surfbrett an [dieser Seite] hängen.
Und wie der das nun so erklärte, keimte in mir der Gedanke, dass man sowas - offensichtlich regelmäßiges - doch sicher auch mit code machen könnte. Gedacht - getan:

Code:
/*********************
ver. 0.8
**********************/
class Ocean {
	var i, j:Number;
	var targetMC:MovieClip;
	function Ocean(MC:MovieClip, lineColor:Number, lineThickness:Number, fillColor:Number, rows:Number, min:Number, max:Number, wavelength:Number, timeShift:Number, yShift:Number, xShift:Number, moveAmplitude:Number, xSpeed:Number) {
		targetMC = MC;
		MC.a = 0;
		MC.t = 0;
		MC._x = -wavelength;
		for (i=1; i<rows+1; i++) {
			MC.createEmptyMovieClip("row"+i, i);
			MC["row"+i].ID = i;
			MC["row"+i].w = wavelength*(i/2);
			MC["row"+i].k = 0;
			MC["row"+i].speed = xSpeed*(i/2);
			MC["row"+i]._x = (1-i)*xShift;
			MC["row"+i]._y = (i-1)*yShift;
		}
		MC.isDamnedToDie = false;
		MC.levelChange = 0;
		MC.onEnterFrame = function():Void  {
			this.t += .1;
			this.a += this.levelChange;
			for (i=1; i<rows+1; i++) {
				this["row"+i].clear();
				this["row"+i].lineStyle(lineThickness, lineColor);
				this["row"+i].beginFill(fillColor, 100);
				this["row"+i].moveTo(0, this.a);
				this["row"+i].k = this["row"+i].speed*this.t;
				while (this["row"+i].k>=0) {
					this["row"+i].k -= this["row"+i].w;
				}
				j = 0;
				while ((j-3)*this["row"+i].w+2*this["row"+i]._x<Stage.width) {
					this["row"+i].curveTo(j*this["row"+i].w+this["row"+i].w/3+this["row"+i].k, this.a-moveAmplitude*this["row"+i].ID/2*((Math.sin(Math.PI*(this.t-timeShift*this["row"+i].ID))+1)/2), j*this["row"+i].w+this["row"+i].w/2+this["row"+i].k, this.a-moveAmplitude*this["row"+i].ID/2*((Math.sin(Math.PI*(this.t-timeShift*this["row"+i].ID))+1)/2)-((max*(this["row"+i].ID/2)-min*(this["row"+i].ID/2))*((Math.sin(Math.PI*(this.t-timeShift*this["row"+i].ID))+1)/2)+min*(this["row"+i].ID/2)));
					this["row"+i].curveTo(j*this["row"+i].w+this["row"+i].w*2/3+this["row"+i].k, this.a-moveAmplitude*this["row"+i].ID/2*((Math.sin(Math.PI*(this.t-timeShift*this["row"+i].ID))+1)/2), j*this["row"+i].w+this["row"+i].w+this["row"+i].k, this.a-moveAmplitude*this["row"+i].ID/2*((Math.sin(Math.PI*(this.t-timeShift*this["row"+i].ID))+1)/2));
					j++;
				}
				this["row"+i].lineTo((j+1)*this["row"+i].w, this.a);
				this["row"+i].lineTo((j+1)*this["row"+i].w, Stage.height+this["row"+i].w+this.a);
				this["row"+i].lineTo(0, Stage.height+this["row"+i].w+this.a);
				this["row"+i].lineTo(0, this.a);
				this["row"+i].endFill();
			}
		};
	}
	function globalWarming(amount:Number, willDieAtTheEnd:Boolean) {
		if (willDieAtTheEnd == true or willDieAtTheEnd == false) {
			targetMC.isDamnedToDie = willDieAtTheEnd;
		} else {
			targetMC.isDamnedToDie = false;
		}
		if (amount>0) {
			targetMC.levelChange = -amount;
		} else {
			trace("Sorry, we cannot reverse global warming.\nPlease ask greenpeace to stop it or ask if anybody wants some tea!");
		}
	}
	function greenpeace() {
		targetMC.levelChange = 0;
	}
	function teaForEveryone(amount:Number, willDieAtTheEnd:Boolean) {
		if (willDieAtTheEnd == true or willDieAtTheEnd == false) {
			targetMC.isDamnedToDie = willDieAtTheEnd;
		} else {
			targetMC.isDamnedToDie = false;
		}
		if (amount>0) {
			targetMC.levelChange = amount;
		} else {
			trace("Sorry, but it's quite impossible to make less than 1 cup of tea for everyone.");
		}
	}
}
das Ganze hätte man sicherlich auch besser, eleganter, irgenwelchen Standarts konfromer, kürzer, schneller, kurz: professioneller lösen können, da dies aber keine meiner Passionen ist, kann ich nur mit obigem dienen.

Das ganze als Ocean.as abspeichern und flash um eine jungfräuliche .fla bemühen, sich in eben dieser befindend eine beliebige Form erstellen,
deren Sichtbarkeit sich auf 0 beschränken sollte.
[Jaaa! Flash besitzt _auch_ Zeichenwerkzeuge]
Dieses unsichtbare Etwas mittels F8 in die Bibliothek prügeln und ihm einen - ebenfalls beliebigen - Instanznamen aufzwängen.
Meinen süßen Fratz habe ich mal "dummy" genannt.

die X-Position dieses MCs ist unerheblich, lediglich seine Y-Position wird sich auf den späteren Meeresspiegel auswirken.
Nach beherzter Liebkosung der, mit "F9" beschrifteten, Taste wird uns ein vor Leere strotzendes Eingabefeld entgegen gewuchtet.
(Die Markierung des 1. Frames vorrausgesetzt)
dieses wollen wir sogleich mit diesem inhalt beglücken:

Code:
import Ocean;
//Ocean(MC:MovieClip, lineColor:Number, lineThickness:Number, fillColor:Number, rows:Number, min:Number, max:Number, wavelength:Number, timeShift:Number, yShift:Number, xShift:Number, moveAmplitude:Number, xSpeed:Number)
var blub:Ocean = new Ocean(_root.dummy, 0x001155, 2, 0x0011AA, 10, 5, 10, 40, .3, 10, 3, 10, 10);
Wer sich nun fragt was diese Heerschar von Parametern will, dem sei hiermit geholfen:


MC:MovieClip | der mc in dem der ganze Zirkus stattfinden soll
lineColor:Number | welche Farbe soll die Grenzlinie enthalten
lineThickness:Number | wie dick soll diese sein
fillColor:Number | welche Farbe soll die zu erzeugende Wasserstelle haben !?
rows:Number | wieviele "Reihen" wasser sind erwünscht?
min:Number | die Höhe des kleinsten Wellenberges
max:Number | und die des größten
wavelength:Number | Länge von Berg zu Berg
timeShift:Number | Zeitdauer, zwischen dem erreichen der Maxima zweier benachbarter Reihen
yShift:Number | Verschiebung in y-Richtung zwischen den Punkten an denen die Maxima erreicht werde zwischen zwei benachbarten Reihen
xShift:Number | yShift in x-Richtung
moveAmplitude:Number | Bewegung der geamten Reihe in y-Richtung bis zum erreichen der Maxima (und anschließende Senkung)
xSpeed:Number | Bewegung der gesamten Reihe in x-Richtung

Hinweis: Alle Größen wirken sich auf jede Reihe unterschiedlich aus, um einen gewissen perspektivischen Effekt zu simulieren.

Ach ja! wessen Wasser noch nicht bis zum Hals steht, kann dies durch die 3 mitgelieferten Methoden bewerkstelligen:

globalWarming() und teaForEveryone() heben bzw. senken den Meeresspiegel um den 1. Parameter pro frame.
der 2. Parameter ist noch nciht fertig eingebaut, er soll später dazu dienen, zu klären, was passiert, wenn der komplette Bildschirm gefüllt/geleert ist (da ganz oben steht "ver. 0.8", ist also noch nicht die finale petra ääh Beta, ist ergo auch noch nicht voll funktionstätig)
greenpeace() stoppt jegliche Meeresspiegelbewegungen ohne dafür einen Parameter zu verlangen.

Wer bei den curveTo's noch durchblick hat, bekommt nen virtuellen Keks.
Ich schlage vor von den gegebenen Werten ausgehend Experimente zu betreiben.

Eigentlich wollte ich die ganzen, auch in den unteren Methoden verwendung findenden, Variablen in der klasse lassen (wie i, j ...) aber aus einem mir unerklärlichen Grund waren sie dann immer undefined, egal was ich ihnen für Werte gab, naja, so funktionierts und wie sagt man soch so schön? "Never stop a running system!"

in diesem Sinne: ich bin natürlich an schriftlich hier materialisierten Meinungen darüber interessiert.

PS: spielt nicht zu sehr damit rum, sonst muss Mutti wieder wischen!
__________________
anbei Grüße vom milchreis: Viva la [Silb]

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele