Cannot compare arguments (draw-event + if)

  • GM 8
  • Cannot compare arguments (draw-event + if)

    Hey ;)

    yaaay, der GML-Fortgeschrittene stellt jetzt die Fortgeschrittenen Fragen.

    :fresse:

    ___________________________________________
    ERROR in
    action number 1
    of Draw Event
    for object o_test_test:

    Error in code at line 1:
    if (global.test_text=1) then {
    ^
    at position 25: Cannot compare arguments.
    Was ist daran falsch? :o

    greez.
    @7rust-dev
  • Joahr, als ich jetzt mit PHP angefangen hatte habe ich erstmal gemerkt was das für Auswirkungen hat....in sogut wie jedem if-Statement schreibe ich zb. then oder nutze nur = :rolleyes: das nervt dann manchmal schon ein wenig..

    @CAS
    Dem Namen nach vermute ich, dass in global.test_text ein String
    steht. 1 ist vom Typ real, und beide Typen kann der GM nicht miteinander
    vergleichen; eines von beiden solltest du dann in den anderen
    umwandeln.


    Gibt es einen Code einen String in eine Zahl zu wandeln?

    grüße ;)
    @7rust-dev
  • real(str) Konvertiert str in eine reelle Zahl, wobei str ein Minuszeichen, einen Punkt zur Dezimalstellenabtrennung (Kein Komma!) und sogar einen exponentiellen Teil enthalten kann.
    Hilfe benutzen kann einem schon immens helfen, wenn man "GML-Fortgeschrittener" ist.

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Hm.. jetzt versteh ich wieso viele auf die dynamische Datentypen implementation im GM schimpfen...
    Wie Tobi97 bereits richtig gesagt hat muss für die Funktion real() im übergebenen string eine Zahl drin stecken und sonst nichts anderes! Überhaupt ist die real Funktion in 99% der Fälle überflüssig bzw. leicht vermeidbar.
    Wenn das Problem imemrnoch ähnlich wie das des ursprünglichen Themas ist schreib doch einfach statt

    GML-Quellcode

    1. if (global.test_text = 1) ...
    besser

    GML-Quellcode

    1. if (global.test_text = string(1)) ...
    (auch wenn die string() Funktion als langsam und unsauber gilt! und sich ebenfalls vermeiden lässt: ) Noch besser wäre

    GML-Quellcode

    1. if (global.test_text = "1") ...

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DragonGamer ()

  • Ich möchte hiermit auf die Funktion

    GML-Quellcode

    1. string_digits()
    hinweisen, die alle Zeichen aus einem String entfernt, die nicht durch

    GML-Quellcode

    1. real()
    konvertierbar sind.

    © 2008 by Teamgrill Productions
  • Aber wenn ich meine Daten auslese erhalte ich die Zahlen oftmals nur als String, also muss ich sie ja zum rechnen umwandeln. Ich nutze zwar nicht sonderlich viele Zahlen mit einem , bzw . aber es wäre schon ganz nützlich zu wissen wie ich dann zb. "1,456" vom String zur Zahl umwandeln kann. (oder "1.456")

    Wie genau kann ich mir dann

    GML-Quellcode

    1. string_digits()



    vorstellen? Wird dann "1.456" also zu "1456" und wenn ich es mit real() nochmal konvertiere habe ich dann die Zahl 1456 ?



    grüße ;)
    @7rust-dev
  • Lucke schrieb:

    Wird dann "1.456" also zu "1456" und wenn ich es mit real() nochmal konvertiere habe ich dann die Zahl 1456 ?
    Ja genau so. Damit kannst du ueberpruefen ob der String in eine reelle Zahl konvertiert werden kann. Wenn string_digits(str) leer ist, dann kannst du den String halt nicht konvertieren (wenn da ein "." eigentlich schon). Du kannst dir halt auf der Basis von string_digits einen eigenen Skript schreiben, der noch schaut ob in der Zeichenkette ein Komma drin ist.
    Oder wenn du im String ein "," anstatt einen "." hast, dann ersetze die "," mit string_replace_all(str,",",".");. Dann kannst du die Funktion folgendermaßen anwenden.

    GML-Quellcode

    1. reelle_zahl = real(string_replace_all(zahlen_string,",","."));


    Aber, wenn der GM schon von alleine meckert hat das seinen Grund. Da sind wohl Zeichen drin, die nicht in eine Zahl ueberfuehrt werden koennen.
    Mit einem Beispiel, was fuer einen String du da genau umwandeln willst, waere dir schneller geholfen.

    MfG

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Aus dem, was du hier sagst, kann ich dein konkretes Problem nicht entnehmen (weil ich nicht weiß, wie dein String aussieht). Aber wenn ich jetzt wild ins Blaue hineinraten müsste, würd ich sagen, du benutzt für Dezimalzahlen als Trennzeichen ein Komma statt einem Punkt. Daran wird's wohl liegen, dass real() bei dir nicht funktioniert, im Englischen ist das Trennzeichen nämlich ein Punkt.
    Statt real("12,23") solltest du also real("12.23") benutzen und deine Strings auch entsprechend angeben - es sei denn, du willst dir wirklich die Mühe mit dem Umweg über string_digits() machen. Ein Blick in die Hilfedatei sollte dir an dieser Stelle aber weiter helfen, als wir es hier können.

    Edit: Wow, Trixt0rs letzten Post hab ich ja mal komplett übersehen. >_>
    In dem Sinne also: Siehe Trixt0rs letzten Post. Dem hab ich im Prinzip nix hinzuzufügen.
  • Benutzer online 2

    2 Besucher