Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-12-2004, 15:22   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
String umwandeln in "Garnichts"

hallo.

mal eine etwas merkwürdige frage - folgendes problem:
ich möchte etwas in ein textfeld eingeben, das dann in einer anderen funktion verwendet wird. leider wird ja bekanntlich alles in form von strings, also mit " " weitergegeben, sobald man auch buchstaben eintippt.
ist es möglich, das zu ändern? könnte man beispielsweise den string in ein objekt umwandeln, während man schreibt?

würde mich sehr über antwort freuen!!
mfg
fireshark
FireShark ist offline   Mit Zitat antworten
Alt 19-12-2004, 15:38   #2 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 644
hm, brauchst du doch garnicht, du kannst doch bei deiner function in dei klammer [function blabla()] eine var definieren die du nachher in der funktion verwenden kannst, dann beim aufrufen der funktion kannste doch einfach so machen blabla("hallo");
So schaffste das ein string in deine function zu übergeben.
Um den text eines textfelds weiterzugeben gibst du entweder den pfad zur var oder zum textfeld an, dann muss aber ja bekanntlich ".text" noch hinten dran.

Geändert von jonny-noob (19-12-2004 um 15:39 Uhr)
jonny-noob ist offline   Mit Zitat antworten
Alt 19-12-2004, 15:45   #3 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Hi.

Einen String umwandeln geht glaube ich nicht.

Warum muss er denn gewandelt werden?

Du kannst auch mit Strings z.B. Objekte auf der Bühne
ansprechen. Hier ein Beispiel.
Auf der Bühne liegt ein MC namens box_mc.
Gebe mal in das Textfeld box_mc ein und schaue was passiert.

ActionScript:
  1. _root.mein_txt.onChanged = function() {
  2.     _root[_root.mein_txt.text].onEnterFrame = function() {
  3.         this._x += 10;
  4.     };
  5. };
Angehängte Dateien
Dateityp: zip dynAnsprechen.zip (4,8 KB, 7x aufgerufen)
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 20-12-2004, 15:13   #4 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
erst mal danke für die antworten!
am besten beschreibe ich mal genau, was ich will.
also folgendes:
ziel ist ein kleines script, das mathematische funktionen in graphen umwandeln kann (also z.b. f(x) = 2x² + 4 als parabel). so etwas hat auch in der ersten version prima geklappt, doch ich wollte das ganze flexibler machen (z.b. auch sin, cos, parabeln 6., 7., etc. grades), deshalb sollte man die ganze funktion einfach selbst in das feld eingeben.
wenn man aber z.b. eintippt "x" (also y = x), dann liest der interpreter "y = 'x'", "x" eben als string. und dann funzt es nicht mehr. wenn ich den code ändere in
y = x;, geht es.
es sollte aber:
y = feld;. in das feld gibt man die funktion ein. dann geht es aber nicht mehr...
hier nochmal ein gekürzter auszug des scriptes:
Code:
fx.onRelease = function() {
	set(feld, 0);
	for (i = -500; i <= 500; i++) {
		attachMovie("ding", "ding" + i, i);
		x = i/2;
		y = feld;
		_root["ding"+i]._x = x + breite;
		_root["ding"+i]._y = y + hoehe;
	}
}
könnt ihr mir helfen? ich bin ziemlich ratlos.
mfg
fireshark
FireShark ist offline   Mit Zitat antworten
Alt 20-12-2004, 15:34   #5 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
von alleine geht sowas nicht.
woher sollte das flash auch wissen, dass das X ein stellvertreter für eine zahl sein soll und nicht einfach ein X ?
dieses umzuwandeln, das musst du schon selbst programmieren. sowas nennt man dann einen parser.
ActionScript:
  1. var x=13;
  2. var vFormel="x+20*cos(x)";
  3. vFormel=vFormel.split("x").join(x);
  4. vFormel=vFormel.split("cos(").join("Math.cos(Math.PI/180*");
  5. trace(vFormel);
jetzt müsstest du allerdings noch etwas schreiben, was diesen string ausrechnet, mit allen mathematischen besonderheiten wie punkt- vor strichrechnung usw.
und dabei auch auf mögliche schreibvarianten achten, wie z.b. auf das weglassen des "mal"-zeichens.
var vFormel="x+20 cos(x)+xy";

--------------------
einfacher ist es vielleicht, wenn du ein paar formeln zur auswahl vorgibst und man dann "nur" die grenzwerte eingeben kann.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (20-12-2004 um 15:39 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 20-12-2004, 20:03   #6 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
vielen dank für den parse-code!! so etwas ähnliches habe ich schon mal in einem meiner anderen threads in einem ähnlichen zusammenhang gesehen, das war aber ziemlich anders und hat nicht funktioniert. jetzt verstehe ich den kontext viel besser.
das mit den mathematischen formeln ist auf jeden fall das kleinste problem. übrigens: punkt vor strich z.b. - das beachtet der interpreter schon automatisch!

mfg
fireshark
FireShark ist offline   Mit Zitat antworten
Alt 20-12-2004, 20:22   #7 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
kann vielleicht noch mal jemand mein zwischenergebnis überprüfen?
ich habe den code mal eingefügt, allerdings funzt noch nicht alles wie es sollte. könnte es sein, dass ich da total auf dem holzweg bin, oder ist der ansatz richtig?
PHP-Code:
fx.onRelease = function() {
    
set(feld0);
    for (
= -500<= 500i++) {
        
attachMovie("ding""ding" ii);
        
feld feld.split("x").join(x);
        
i/2;
        
feld;
        
_root["ding"+i]._x breite;
        
_root["ding"+i]._y hoehe;
    }

mfg
fireshark
FireShark ist offline   Mit Zitat antworten
Alt 20-12-2004, 20:39   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
hin und wieder mal tracen bzw. mal den debugger benützen ;-)

feld = feld.split("x").join(x);
x = i/2;
y = feld;
zuerst ersetzt du in feld den text "x" durch den inhalt der variablen x,
die du aber erst DANACH definierts??

und nachdem du bereits im 1. schleifendurchgang das "x" rausgenommen hast, wirst du es in den folgenden durchgängen kaum noch in feld finden.

so ist das prinzipiell richtiger (in deinem sinne, vermute ich mal):
x = i/2;
y = feld.split("x").join(i);



ich bezweifle aber, das flash einen textstring ausrechnet.
z.b.
var vFormel="5+3";
trace(7+vFormel);
//
// ergibt den string "75+3"
// und keineswegs das rechenergebnis 15
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (20-12-2004 um 20:42 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 20-12-2004, 21:08   #9 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
super!
der ansatz funktioniert.
du meintest aber:
y = -feld.split("x").join(x);.

gibt es denn keine möglichkeit, das ganze auch mit ganzen rechnungen zu machen?? sobald ich z.b. "2 * x" eingebe, funzt es nicht mehr (wie du schon sagtest). daran soll es nun echt nicht scheitern!

mfg
fireshark
FireShark ist offline   Mit Zitat antworten
Alt 20-12-2004, 23:11   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
"..du meintest aber.."
ich meine vor allem, du sollst keine variable benützen, die erst in der folgenden zeile definiert wird.
und ein minuszeichen vor einem textstring funktioniert auch nicht.

flash kennt keinen befehl "einen string als function" auszuwertet.
das hatte ich bereits geschrieben und flash hat sich in der zwischenzeit auch nicht verändert. du brauchst also nicht nochmal zu fragen:
"..jetzt müsstest du allerdings noch etwas schreiben, was diesen string ausrechnet, mit allen mathematischen besonderheiten wie punkt- vor strichrechnung usw.
und dabei auch auf mögliche schreibvarianten achten, wie z.b. auf das weglassen des "mal"-zeichens.
var vFormel="x+20 cos(x)+xy";
.."
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (20-12-2004 um 23:13 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 21-12-2004, 00:03   #11 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
hui hartes thema ausgesucht.
wenn du php hast würde ich lieber ming in verbindung mit openswf.com verwenden-ne is auch nich besser!

willst dus wirklich in flash realisieren, dann mußt du deinen code sehr variabel halten, denn operatoren kannst du definitiv NICHT parsen du mußt sie über 4 abfragen(für jede grundrechenart(+-*/)) an den echten operator "weiterleiten".
ActionScript:
  1. f=function(a,b,op){
  2. if(op=="*"){
  3.   return a*b
  4. }else if(op=="+"){
  5.  return a+b
  6. } //..usw
  7. }

damit wäre dein hauptproblem schonmal in die richtige richtung gelenkt.
was du jetzt brauchst um
so gleichungen wie
cos(x)*cosy zu lößen ist eine funktion die dir deine gleichung in untergleichungen unterteilt(cos,sin), bei cos(sin(x)) natürlich nach klammernregeln vorgehen,
und nun herausfinden was der user eingetippt hat
dafür am besten nen array mit gültigen mathematischen funktionen anlegen.
zB

fkt=["sin","cos"] //...


-operator herausfinden
-damit splitten ("x*x").split("*")
-über schleifen und indexOf entsprechende funktion von flash suchen
und per

fkt="cos" //heruasgefundene funktion
Math[fkt](x)

ausführen.

hast du sowas mal geschafft und natürlich(!!) auch punkt vor strich,klammern von innen nach außen, und was es sonst für regeln gibt beachtet kannst du theoretisch jede noch so lange funktion berechnen.

viel spaß
hier gabs auch mal nen thrad dazu
such mal nach plotter


gruß
deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 21-12-2004, 00:32   #12 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
@Deluxe
genau so, oder so ähnlich ;-)
wenn's dann fertig ist heisst das ding: Mathematika

und das ist auch genau der grund, warum ich schon gestern mittag FireShark das da vorgeschlagen hatte:
"..einfacher ist es vielleicht, wenn du ein paar formeln zur auswahl vorgibst und man dann "nur" die grenzwerte eingeben kann.."

aber auf mich hört ja mal wieder keiner...
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 22-12-2004, 15:11   #13 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
moin.

@deluxe: vielen dank für die vorschläge. das scheint ja echt nicht einfach zu sein. mal sehen, on ich dafür überhaupt die zeit finde.

@hgseib: doch, ich hatte deinen vorschlag schon in erwägung gezogen... aber ich kann noch nicht sagen, was ich im endeffekt machen werde.
und wieso hab ich ein minuszeichen vor meine formel gesetzt? weil flash bekanntlich das kartesische koordinatensystem vertikal umdreht.

mfg
fireshark
FireShark 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 08:44 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele