rotation, fehler im detail =)

hi :)
also helfen kann ich dir, aber frag nicht nach ner erklärung.. die finde ich selbst nicht..
also du musst bei:

xb = xm + xa und
yb = ym + ya

anstatt nem plus ein minus hinschreiben. frag mich nicht warum, eigentlich dürfte das nur die richtung ändern in der sich der kreis aufbaut, aber so klappts... wenn ich herausfinde wiso das so geht und anders nicht schreib ichs hier rein..

*sancho*
 
Hoi ihr beiden :)

Euer "Problem" ist relativ logischer Art:

Jegliche Eingabe, die Flash über ein Input-Textfeld erfährt, wird als String deklariert, da Eingabefelder vom Wesen her eben zur Eingabe von Strings gedacht sind.

Ihr wollt aber mit Nummern rechnen, da können Strings in bestimmten Fällen nicht taugen, auch wenn deren Wert an sich einer Ziffer oder Zahl entspricht.
Es gestaltet sich oft als relativ problembehaftet, mithilfe von Zahlenwerten, die in Strings vorhanden sind, eine numerische Operationen wie die Addition durchzuführen...

Die logische Ursache hierfür findet sich in der Datentypenergründung:
Strings besitzen als Klasse Methoden, wie auch MovieClips, Arrays oder Dates.
Eine dieser Methode ist die Methode concat(), welche 2 oder mehr Strings miteinander verknüft, aber auf Art und Weise der Klasse String eben - in dem Falle würde der eine String an den anderen angehängt werden.

Ein einfaches Beispiel dafür wäre folgendes:
PHP:
s = "2";		// definiert einen String mit Inhalt 2
t = "6";		// definiert einen String mit Inhalt 6
u = s.concat(t);	// konkateniert Strings und manipuliert damit u
trace(u);		// gibt den Wert von u aus
Hier wird - wie oben vorausgesagt - der eine String an den anderen angehängt und es kommt zum String "26".

Nun gibt es für das Konkatenieren von Strings mithilfe der concat()-Methode noch eine sekundäre Ausdrucksform, die aber das gleiche bewirkt wie concat():

der Operator +

Und damit kommen wir der Sache langsam auf den Grund:
Es werden 2 Strings also auch wie folgt konkateniert:
PHP:
s = "2";		// definiert einen String mit Inhalt 2
t = "6";		// definiert einen String mit Inhalt 6
u = s + t;		// konkateniert Strings und manipuliert damit u
trace(u);		// gibt den Wert von u aus
Hui, mithilfe des +-Operators gelingt also auch das Aneinanderhängen von 2 Strings.

Was nun aber, wenn ein String auf eine Zahl trifft?
Nun, dann bedient sich ActionScript als Scriptsprache von Flash einer seiner vielen Vorteile gegenüber anderen Sprachen, wie der Programmiersprache C oder Java:

Es besitzt die Möglichkeit, Datentypen zu gegebener Zeit ineinander umzuwandeln!

Damit bietet sich die Möglichkeit, dynamisch einen Datentyp wie einen String in einen anderen Datentyp wie eine Nummer umzuwandeln, ohne dabei an syntaktische Fehler zu geraten - Variablen in ActionScript, sind also ähnlich wie Variablen in JavaScript, nicht an einen Datentyp gebunden, sondern können während der Laufzeit des Filmes in Werte eines anderen Datentyps beinhalten - das wäre in o.g. Programmiersprachen C und Java nicht möglich, da diese aber auch im Gegensatz zu ActionScript/JavaScript kompiliert werden, ActionScript/JavaScript hingegen nur zur Laufzeit interpretiert.

Nun - um zurückzukommen, findet sich genau die Sinnhaftigkeit dieser Eigenschaft beim Konkatenieren von String und Nummer wieder:
Durch
PHP:
xb = xm + xa;
bzw.
PHP:
yb = ym + ya;
wird also ein String (xm/ym) mit einer Nummer (xa/ya) in Kontakt gebracht.
Hierbei erlangt der String Priorität und Flash erkennt das +-Zeichen als Operator für's Konkatenieren von Strings wieder,
anstatt es an dieser Stelle für eine numerische Addition zu halten.
Für das Konkatenieren werden aber 2 Strings benötigt, also wandelt ActionScript kurzerhand die Nummer xa, bzw. ya in einen String
mit dem gleichen Inhalt um und hängt dieses an den jeweiligen anderen String xm, bzw. ym.
Und was das heißt, wenn die scheinbaren Zahlen aneinandergehängt werden, könnt ihr euch mittlerweile gern selbst ausmalen.

Die Auflösung des Rätsels geschieht mithilfe einer Methode, um einen String, wie xm und ym es eben sind, in eine Nummer umzuwandeln, bevor
der ActionScript-Interpreter die zugehörige Nummer in einen String umwandelt.
Diese Methode ist die parseFloat()-Methode, welche als Argument einen String erwartet und als Rückgabewert eine Nummer liefert.
PHP:
xb = parseFloat(xm) - xa;
yb = parseFloat(ym) - ya;
sollten also die richtigen Zeilen im Script heißen, dann klappt's auch.

Wenn ihr euch an dieser Stelle noch fragt, warum denn die Variante mit dem --Operator geklappt hat, dann gibt's hier noch eine einfache Erklärung:
Der --Operator besitzt im Gegensatz zum +-Operator keine zweite Funktionsweise, wie das es beim +-Operator ja mit dem Konkatenieren von Strings der Fall wäre, sondern ist dem ActionScript-Interpreter nur als numerischer Operator bekannt, der Nummern subtrahieren kann.
Demzufolge besitzt diesmal nicht der String Priorität gegenüber der Nummer, sondern im entgegengesetzten Fall wird hier der String automatisch zur Nummer konvertiert und die Subtraktion der Werte findet, wie gewünscht statt.

Ich hoffe, mit dieser etwas längeren Ausführung, Licht in's Dunkel des ActionScript-Verständnisses gebracht zu haben. :)

schönen Abend noch allen,
Geist
 
hi

jepp, jetzt hats "click" gemacht, danke.. :)
für solche sachen müsst ich mich mehr mit dem grundaufbau von scripten auskennen, nur is da halt wenig basiswissen vorhanden :/

*sancho*
 
dass flash 2 funktionen für + hat, hab ich gewusst,
aber wie man flash sagt, er soll etwas als ne zahl ansehen, wusst ich nich =)
so lernt man dazu

thx
 

Neue Beiträge

Zurück