Type-Fehlermeldung
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
KlipBetreff: Type-Fehlermeldung |
Fr, Okt 28, 2005 15:03 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] SetColor 200,0,150 For Global my_enemy:enemy = EachIn enemy_list DrawOval(my_enemy.x,my_enemy.y,my_enemy.size,my_enemy.size) my_enemy.x:+ my_enemy.xspeed my_enemy.y:+ my_enemy.yspeed If my_enemy.x > gfx_width Or my_enemy.x < 0 Then my_enemy.xspeed:* (-1) If my_enemy.y > gfx_height Or my_enemy.y < 0 Then my_enemy.yspeed:* (-1) Next Wenn ich dies innerhalb meiner Hauptschleife einbinde, dann sagt er mir an der Stelle der For-Schleife, dass er eine Expression erwartet, aber nur Global bekommt. Nehme ich das Global weg, dann sagt er: "Identifier my_enemy not found!" Woran liegt das? Habe exakt ein Tutorial nachgebaut, aber es funktioniert trotzdem nicht. |
||
gamble |
Fr, Okt 28, 2005 15:41 Antworten mit Zitat |
|
---|---|---|
Du musst das Global durch ein Local ersetzen, dann funktioniert es | ||
Klip |
Fr, Okt 28, 2005 15:44 Antworten mit Zitat |
|
---|---|---|
Tatsächlich, danke.
Kannst du mir erklären, wieso das so ist? Ist es denn in dem Falle nicht egal, ob ich globale oder lokale Variablen nehme? Wenn schon, dann hätte ich akzeptiert, dass es global sein muss, aber lokal? Ist das eine ungeschriebene Regel oder liegt das an dem Code an sich? |
||
gamble |
Fr, Okt 28, 2005 16:06 Antworten mit Zitat |
|
---|---|---|
Warum das so ist, weiß ich nicht. Falls Du die Variable unbedingt Global haben willst, kannst Du sie auch vorher definieren.
Code: [AUSKLAPPEN] Global my_enemy:enemy For my_enemy = EachIn enemy_list ' ... Next |
||
Klip |
Fr, Okt 28, 2005 16:10 Antworten mit Zitat |
|
---|---|---|
Nein, das hatte nicht geklappt, mit dem vorher definieren.
Da meinte er auch, er erwartet eine Expression, deswegen wundere ich mich ja auch so. |
||
Dreamora |
Fr, Okt 28, 2005 23:15 Antworten mit Zitat |
|
---|---|---|
Die lokale Deklaration dient hauptsächlich dem Zweck die von C her stammenden "Deklarationsorgien" für Schleifenzähler los zu werden, indem man dem Programmierer in Strict die Möglichkeit gibt eine Zählervariable lokal im Schleifenkopf zu deklarieren.
Denn sonst müsste man in Strict vorher alle variablen deklarieren, selbst wenn man sie nur für diese eine Schleife zum "durchzählen" braucht was die Lesbarkeit und Verständlichkeit von Code senken kann. Das macht für globale Variablen jedoch wenig Sinn, denn wenn man sie global hat, will man sie ja auch anderweitig noch nutzen, also sollte man sie auch ordnungsgemäss definieren (und BM erzwingt das glücklicherweise auch), damit man ihre Deklaration später überhaupt wieder findet. Deine letzte Version ginge auch, wenn du my_enemy vorher mittels global my_enemy:enemy deklarierst. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Klip |
Sa, Okt 29, 2005 15:46 Antworten mit Zitat |
|
---|---|---|
Ah, okay, dankeschön. Stimmt, das ergibt Sinn.
Ich lasse es aber lieber so lokal in der Schleife drin, da mein Code jetzt nicht so lange ist (ist ein sehr simples Programm zum Einstieg und üben). |
||
Dreamora |
Sa, Okt 29, 2005 23:00 Antworten mit Zitat |
|
---|---|---|
Wenn du es sonst nicht brauchst sondern nur für die Schleife ist das auch sehr ratsam, da Local schneller ist als Global | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group