Merkwürdiger Fehler

Previous topic - Next topic

Fauk

Bei mir kommt bei folgendem Code immer ein Syntax Error:
Code (glbasic) Select

IF ((Spieler1.Y) - 100) >= (Screen_Y - 16) THEN ((Spieler1.Y) - 100) = (Screen_Y - 16)


Wenn ich es so mache funktioniert es:
Code (glbasic) Select

IF ((Spieler1.Y) - 100) >= (Screen_Y - 16) THEN Spieler1.Y = (Screen_Y - 16)


So aber wiederum auch nicht:
Code (glbasic) Select

IF ((Spieler1.Y) - 100) >= (Screen_Y - 16)
      ((Spieler1.Y) - 100) = (Screen_Y - 16)
ENDIF


Habe es schon mit und ohne Klammern versucht, jedesmal das gleiche Ergebnis.

Sehe ich da den Fehler nicht oder ist das ein Bug?

Kosta

Meiner Meinung nach (wart aber lieber nach einer Aussage von Gernot):

Mit THEN kannst du nur einen Befehl benutzen. Durch die Umklammerung werden (intern?) mehrere Befehle daraus und der Compiler verspult sich irgendwie..
Intel QuadCore, Geforce8600GT,512MB,4GB Ram, 26" TFT
HP nw8440 Schläppy
GP2X Mk2 (Firmware 3.0)

GLBASIC Blog:
http://www.glbasic.com/forum/index.php?blog=51.0

Fauk

Dann müsste es doch aber mit IF....ENDIF funktionieren, was es aber auch nicht tut:/

Quentin

ähhh eine Zuweisung hat aber eigentlich die Berechnung nur auf der rechten Seite des Ausdruckes:

also:
Code (glbasic) Select

Spieler.y - 100 = Screen_Y - 16


ist schmarrn, zumindest für einen Compiler, auch wenn es mathematisch gesehen korrekt sein kann ;))

richtiger wäre hier dann wohl
Code (glbasic) Select

Spieler.y = Screen_Y - 16 - 100


In der IF-Abfrage klappt das natürlich, weil du hier ja zwei Ausdrücke vergleichst, bei Wertzuweisungen kann das aber nicht klappen.
Wertzuweisungen haben auf der linken Seite des Gleichheitszeichen eine Variable und rechts davon einen beliebig komplexen Ausdruck. Beim Vergleich mit IF werden zunächst die Ausdrücke rechts und links vom Vergleichsoperator (=, >, < etc.) berechnet und dann der Vergleich gemacht.

peterpan

Ja,  Quentin liegt richtig !
Man kann das auch so schreiben:

if spieler1.Y -100 >= screen_Y -16
screen_Y = screen_Y -16
spieler1.Y = screen_Y
endif

Kitty Hello

Quentin hat zu 99% recht.
Der = operator ist auf der linken Seite eine Zuweisung:
a = 5+7
auf der rechten Seite, ist er ein Vergleich:
IF a=5 THEN ...
und:
a = b=c
b=c wird TRUE oder FALSE, das wird dann a zugewiesen.

peterpan

und das Fehlende 1% liegt wahrscheinlich an seinem Freudentanz !

That is one percent  jig !
http://de.youtube.com/watch?v=6uscaMe5lVg&feature=related.

Fauk

Ah, ok. Vielen Dank für die Aufklärung :good: