Canvas in Schleife erstellen?
Übersicht

DonutBetreff: Canvas in Schleife erstellen? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
![]() |
HolzchopfMeisterpackerBetreff: Re: Canvas in Schleife erstellen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
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]
natürlich ginge auch das: BlitzMax: [AUSKLAPPEN]
|
||
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
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oder auch:
BlitzMax: [AUSKLAPPEN] Global Canvas:TGadget[] 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 THERE 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Donut |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Fehler liegt in der For-Schleife. Es müsste lauten:
BlitzMax: [AUSKLAPPEN] Global Canvas:TGadget[7,6] 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 BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
upps, danke Holzchopf, ![]() ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die tolle (und schnelle) Hilfe ![]() |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 ![]() |
||
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group