Canvas in Schleife erstellen?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

Donut

Betreff: Canvas in Schleife erstellen?

BeitragMi, Sep 07, 2011 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde gerne Canvas-Elemente in einer Schleife erstellen lassen z.B so:
Code: [AUSKLAPPEN]
For j = 0 Until j = 6 Step 1
   For i = 0 Until i = 5 Step 1
      Local Test:TGadget=CreateCanvas(i*32,j*32,32,32,Auswahlfeld)
   Next
Next

Funktioniert natürlich nicht, weil ja immer das selbe Element erzeugt wird. Ist es möglich einen Namen in abhängigkeit zu einer Variable zu vergeben?
z.B
Code: [AUSKLAPPEN]
Local Test[i]:TGadget=CreateCanvas(i*32,j*32,32,32,Auswahlfeld)

oder
Code: [AUSKLAPPEN]
Local "Test"+i:TGadget=CreateCanvas(i*32,j*32,32,32,Auswahlfeld)

oder ähnlich?

Die Selbe frage stellt sich dann natürlich auch beim abfragen eines Elementes Wink

Holzchopf

Meisterpacker

Betreff: Re: Canvas in Schleife erstellen?

BeitragMi, Sep 07, 2011 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Donut hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
Local Test[i]:TGadget=CreateCanvas(i*32,j*32,32,32,Auswahlfeld)


Klar, guck dir Arrays an. Unter Help - Language - Arrays im Browser rechts in der IDE.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Midimaster

BeitragMi, Sep 07, 2011 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Klar, aber du wirst die Canvases GLOBAL erstellen müssen, damit Du sie später auch wieder einzeln ansprechen kannst.

Die Syntax geht übrigens so: Erst Name, dann Typ, dann Dimension

BlitzMax: [AUSKLAPPEN]

Global Canvas:TGadget[50]
For j = 0 Until 6
For i = 0 Until 5
Canvas[j*6+i] = CreateCanvas(i*32,j*32,32,32,Auswahlfeld)
Next
Next


natürlich ginge auch das:


BlitzMax: [AUSKLAPPEN]

Global Canvas:TGadget[7,6]
For j = 0 Until 6
For i = 0 Until 5
Canvas[ i , j ] = CreateCanvas(i*32,j*32,32,32,Auswahlfeld)
Next
Next
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
  • Zuletzt bearbeitet von Midimaster am Mi, Sep 07, 2011 15:43, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragMi, Sep 07, 2011 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder auch:
BlitzMax: [AUSKLAPPEN]
Global Canvas:TGadget[]
For j = 0 Until 6
For i = 0 Until 5
Canvas:+[CreateCanvas(i*32,j*32,32,32,Auswahlfeld)]
Next
Next


Edit: Heimlich korrigiert.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
  • Zuletzt bearbeitet von Xeres am Mi, Sep 07, 2011 15:42, insgesamt einmal bearbeitet
 

Donut

BeitragMi, Sep 07, 2011 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Hilfe!
Also die Arrays werden erkannt, der Kompiler gibt auch keine Fehler aus trotzdem werden in der Schleife keine Elemente erstellt.
Wenn ich die Elemente ohne Schleife erstelle klappts.

Xeres

Moderator

BeitragMi, Sep 07, 2011 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Code, bitte!
Ohne kann man da nur "Oh, sowas aber auch!" sagen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Donut

BeitragMi, Sep 07, 2011 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Global Canvas:TGadget[7,6]
For j = 0 Until j = 6
   For i = 0 Until i = 5
      Canvas[ i , j ] = CreateCanvas(i*32,j*32,32,32,Auswahlfeld)
   Next
Next

Es werden keine Elemente erstellt.

Code: [AUSKLAPPEN]
Global Canvas:TGadget[7,6]
i = 0
j = 0
Canvas[ i , j ] = CreateCanvas(i*32,j*32,32,32,Auswahlfeld)
i = 1
j = 1
Canvas[ i , j ] = CreateCanvas(i*32,j*32,32,32,Auswahlfeld)

Es werden Elemente erstellt
  • Zuletzt bearbeitet von Donut am Mi, Sep 07, 2011 15:31, insgesamt einmal bearbeitet

Midimaster

BeitragMi, Sep 07, 2011 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
nur so'ne idee: ist das Mutter-Gadget AuswahlFeld wirklich in der Schleife bekannt?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Holzchopf

Meisterpacker

BeitragMi, Sep 07, 2011 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Fehler liegt in der For-Schleife. Es müsste lauten:

BlitzMax: [AUSKLAPPEN]
Global Canvas:TGadget[7,6] 
For j = 0 Until 7
For i = 0 Until 6
Canvas[ i , j ] = CreateCanvas(i*32,j*32,32,32,Auswahlfeld)
Next
Next


Denn mit For j = 0 Until j = 6 gehst du von 0 bis (exklusive) 0 - also wird der Schleifenkörper gar nie ausgeführt. Wieso bis exklusive 0? Ganz einfach: BMax interpretiert die Angabe j = 6 an dieser Stelle als logischen Ausdruck und vergleicht j mit 6, was natürlich nicht gleich ist. Also ist j = 6 eine falsche Aussage und somit gleichbedeutend mit 0.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Midimaster

BeitragMi, Sep 07, 2011 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
upps, danke Holzchopf, Laughing das war mir gar nicht aufgefallen. Das kommt davon wenn man code einfach schnell kopiert! Embarassed Und Xeres hatte es auch nicht gesehen...

Ich bessere das mal gleich in meinem Beitrag aus, sowas sollte so nicht stehen bleiben!
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
  • Zuletzt bearbeitet von Midimaster am Mi, Sep 07, 2011 15:50, insgesamt einmal bearbeitet
 

Donut

BeitragMi, Sep 07, 2011 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die tolle (und schnelle) Hilfe Very Happy
 

PhillipK

BeitragDo, Sep 08, 2011 7:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal so in den Raum geworfen, wo das hier grade Thema war:

Was passiert genau im 'kopf' eines Programmes, wenn es vor der aufgabe "for local j:Int= 0 until j = 10" steht?
Ist das ohne Strict/Superstrict überhaupt Compilebar?

Kanns grade nicht selber testen, deshalb frage ich =)

noch direkt ein edit hinterher:

Wenn ich mir nicht sicher bin, ob in einer Schleife was passiert, hau ich immer direkt ein Print mit rein Smile
und wenns nur ein sinnloses Print "Canvas wurde erstellt!"

Da du dir ja sicher warst, das dein Code ohne Schleife funktioniert (weil du es getestet hast), wäre das direkt mal ein Versuch wert gewesen Smile Ein mögliches problem wäre nämlich gewesen: Die schleife wird nicht korrekt ausgeführt. =)

Lobby

BeitragDo, Sep 08, 2011 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Was sollte er bei
BlitzMax: [AUSKLAPPEN]
For Local j:Int= 0 Until j = 10
...

schon tun? Er erstellt j und weist ihm den Wert 0 zu, anschließend wertet er j=10 aus (im Strict-Mode muss j bereits vorher definiert worden sein, da er hierbei nicht auf das eben erstellte j zugreifen kann, im non-strict-Mode erstellt er hingegen einfach ein neues j). Die Bedinung j=10 ergibt bei neu erstelltem j natürlich 0, weil j ja dann mit 0 gefüllt ist und infolge dessen die Bedinung unwahr ist. Hat man selbst vorher ein j definiert, so hängt es von dessen Wert ab, ob die Bedinung genau einmal erfüllt, also 1, ist. In ersterem Fall wird er daher den Code in der Schleife gar nicht ausführen, und im zweiten Fall genau einmal.
Hier ist es wichtig zu wissen, dass es sich eben um ein etwas anderes Until handelt, als bei der repeat-until-Schleife.

Global wird übrigens völlig überbewertet.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group