For-Schleifen für arrays
Übersicht

erforderlichBetreff: For-Schleifen für arrays |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Tach,
ein besserer Titel is mir nich eingefallen ![]() also: nachdem ich in meinem letzten Treat das Problem der Bezugspunkt gelöst habe, will ich mein Objekt in einzelteile auf Teilen, d.h. Türen zu Türen, Schalter zu Schalter, un so weiter... ich lese aus dem B3d objekt mit hilfe einer For-Schleife alle türen raus.. hier is ein bespiel code (kanns nich so gut beschreiben) Code: [AUSKLAPPEN] Dim tür(1)
For i = 0 To 1 tür(i) = FindChild(map\map_data,"door_"+(i)) Next Damit Hätte ich z.B. Tür0 un Tür1 rausgesucht. Das Gleiche für den Schalter, un wie ihr wisst, erstellt der Schalter ja eine Area die nach dem Spieler abgefragt wird, damit die Tür aufgeht. Also mach ich: (hier liegt auch der Fehler) Code: [AUSKLAPPEN] for i=0 to 1 ;türen for b=0 to 1 ;schalter for c=0 to 1 ;nochwas (mehr möglcihkeiten) ;ich will im ersten Durchgang die nuller aus den arrays ;überprüfen also Tür0, Schalter0, nochwas0 print i print b next next next Wenn ihr den code ausprobiert (in eurer Mainloop) seht ihr was ich meine, es werden nicht immer 3 "0" ausgegeben, sondern alles kreuz und quer... Hat jemand ne Lösung? Bei offenen Fragen zu diesem Problem, einfach fragen, MfG, erforderlich |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
warum sollten auch 3x 0 ausgegeben werden die ganze zeit??
Es gibt ibc 000 001 010 011 100 101 110 111 |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
erforderlich |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hast du auch eine Vernünftige Lösung? Ich sagte doch das da ein Fehler drin steckt...Mir is beim pinkeln ( ![]() Code: [AUSKLAPPEN] for i=0 to 1
print i next brauche... For scheint aber überhaupt nicht die richtige Lösung für mein Problem zus ein, oder? Hat jemand eine Idee wie man das Kind schaukeln könnte? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du dein Problem sinnvoll spezifizieren würdest, könnte man dir vielleicht helfen.
Aber mit dem hier nicht wirklich. Überdies zweifel ich langsam daran, dass es am richtigen Ort ist ( Beginner Ecke wär glaub richtig, da du am prinzipiellen Problem hast, nicht an irgend etwas das auch nur im Ansatz fortgeschritten wäre ) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
erforderlich |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich will jetzt nicht frech werden oder so,
aber wenn dieser Thread ins Beginner Forum sollte, warum kannst du ihn dann nich beantworten? nochmal klipp und klar: Ich habe einen Schalter und eine Tür mit einem array. Loguscherweise wird es immer genau so viele Schalter wie Türen geben. Nun habe ich in einer For schleife die dateien geladen. z.B. : Code: [AUSKLAPPEN] door_anzahl = 1 dim door_dim(door_anzahl) for i=0 to door_anzahl door_dim(i) = findchild(map, "door"+i) next somit hätte ich alle tür objekte asuber geordnet rausgefischt. Auf die glecihe Weise auch die Schalter.. Nun will ich in der Hauptschleife die aktionen für alle Objekte mit einer "0" hintendran (z.B.: door_dim(0)) mit anderen Objekten mit einer "0" als anhang vergleichen(z.B.: schalter_dim(0)). Wie kann ich dafür ein komfortable Lösung finden..? Kann ja sein das ich plötzlich ne Tür mehr rein mache, dann erhöhe ich eben die Anzahl werte, un eine Tür wird mehr geladen..(geladen wird sie sowieso, aber eine neue Tür in den Dim reingebracht..) Nun soll door_dim(0) nich mit schalter_dim(1) agieren, sondern sich auf schalter_dim(0) beziehen Das will ich auf eine komfortable Weise Handeln.. Mir is auf den ersten Schlag "For" dazu eingefallen...scheint aber keine Lösung darzubieten.. So, das war jetzt aber ehrlich eine seeehr ausführliche Beschreibung meines Problems.. Ich hoffe dann mal auf Hilfe |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jetz ist die Frage sogar verständlich ...
Wenn du immer gleich viele Schalter wie Türen hast, kannst du einfach eine Schleife machen und die Variable für alle Vergleichsarrays nutzen. Sprich: for i = 0 to xy ; vergleiche tuere (i) mit schalter (i) und irgendwas (i) next Denke das ist das was du suchst oder? Das die Variable immer bei allen identisch ist, da es keine weiteren Abhängigkeiten zwischen Schalter, Türe und sonstwas gibt von dem her was du geschrieben hast. PS: Warum ich sie net beantworten kann ist glaub klar, finde ich zumindest.. Aus dem Grund weswegen du sonst keine Antwort bekommen hast. Überleg dir das nächste Mal bitte erst, was du überhaupt wissen möchtest. Da wir nicht in deinem Kopf sind, können wir aus wirren Texten leider keine Probleme und Lösungen er-hellsehen und dir somit leider auch nicht helfen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
erforderlich |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo,
For Schleifen scheinen generell kein Lösung zu sein...vielleicht eine For-Schleife ausserhalb der Mainloop, zum analysieren der map, "goto" oder wie das heist in eine Mainloop springen..da könnte man, das vorher geordnete die ganze Zeit überprüfen..wäre das eine Idee? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Warum sollte eine For - Schleife keine Lösung sein?
Ich glaube eher du hast in deiner grundlegenden Überlegung einen Fehler. PS: Goto ist nie eine Lösung. Es gibt nur einen Fall der es in Blitz3D wirklich legitimiert und das ist das springen aus verschachtelten Schleifen, da es kein erweitertes Exit gibt mit Scope Labels. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
erforderlich |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dann stellt diesen Thread meinet wegen ins beginner forum, aber lasst mich nicht so zappeln...hat jemand ne Lösung zu meinem Problem, oder kann mir For schleifen nochmal erklären (jez keine OH oder BB seiten links, bitte, ich habe diese beginner tuts schon laaaange durch), danke..
Ich habe wahrscheinlcih mal wieder eine Lücke im logischen Denken, kann bei mir ma öfters vorkommen ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
for i = 0 to xy
; vergleiche tuere (i) mit schalter (i) und irgendwas (i) next mehr brauchst du net. XY ist die anzahl türen bzw. schalter danach kommt einfach dein vergleich den du benutzt zum schauen ob er umgeschalten wurde etc. For zählt einfach die Variable die du angibst vom unteren wert zum oberen wert. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
erforderlich |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habt doch bitte Mitleid und lest euch das durch...
in der Mainloop: Code: [AUSKLAPPEN] For map.map_t = Each map_t For i=0 To map\door_anzahl If EntityY(door_auto(i))=>EntityY(oben(i)) Then doorway(i) = 2 door_animate(i)=0 EndIf If EntityY(door_auto(i))<EntityY(oben(i)) Then If door_animate(i)=1 Then If EntityX(player)>bereich_x_min(i) And EntityX(player)<bereich_x_max(i) Then If EntityZ(player)>bereich_z_min(i) And EntityZ(player)<bereich_z_max(i) Then If EntityY(player)>bereich_y_min(i) And EntityY(player)<bereich_y_max(i) Then doorway(i) = 1 EndIf EndIf EndIf EndIf EndIf If doorway(i) = 1 Then TranslateEntity door_auto(i), 0, 9, 0 ElseIf doorway(i) = 0 Then If (EntityX(player)<bereich_x_min(i))=1 Or (EntityX(player)>bereich_x_max(i))=1 Or (EntityZ(player)<bereich_z_min(i))=1 Or (EntityZ(player)>bereich_z_max(i))=1 Or (EntityY(player)<bereich_y_min(i))=1 Or (EntityY(player)>bereich_y_max(i))=1 Then TranslateEntity door_auto(i), 0, -3, 0 Else If EntityY(door_auto(i))<EntityY(oben(i)) Then doorway(i) = 1 EndIf EndIf If EntityY(door_auto(i))=<EntityY(unten(i)) Then doorway(i) = 2 door_animate(i)=1 EndIf EndIf Next Next Wird sich eh niemand durchlesen... ...Gibt es keine gute Lösung zu meinem Problem? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich seh das Problem darin nicht.
Wenn du jetzt noch etwas mit Schaltern oder sonstwas machst kannst du das doch wohl mit dem gleichen i abfragen. Oder wo ist das Problem? ( das ist zumindest das, was du gefragt hast! ) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
erforderlich |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich habe mich zu unverständlich ausgedrückt, sry, ich dachte das würd durch den Code klar. Ich habe eine Area erstellt (bereich_x_min, bereich_x_max, usw...). Der Fragt die in dieser For schleife ab.
Aber Forschleifen können doch eigentlich gar nicht für andauernde überprüfungen genutz werden. Jeder durchlauf braucht doch Zeit, es werden doch nicht z.B. 2 durchläufe auf einmal gefragt... nehmen wir mal an, ein durchlauf würde 1 sek benötigen um Tür0 un Schalter1 (Area) zu überprüfen. Erst in der nächsten senkunde werden dann Tüt1 und Schalter1 überprüft...(nurmal so eine Theory), das würde doch zu verzögerungen führen... Ich habe mir mal ein Verfahren überlegt.. Also: 1) Der guckt: wie viele Türen haben wir 2) erstellt jenach anzahl für jede Tür eine Datei (?!) 3) In der Datei wird überprüft, gibt es Tür0 schon, wenn ja: Datei für Tür1 schreiben..Diese Datei wird dann in der Mainloop ausgeführt.. Was haltet ihr davon? Schon Ideen zur Umsetzung? ![]() tschüss |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Spiele haben unzählige For Schleifen.
Natürlich geht das so. Das rendern dauert bedeutend länger als die spiele logik. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
erforderlich |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
scheint aber nicht zu funktionieren... ![]() Den Code, den ich benutz habe, habe ich oben aufgeschrieben, er muss ja in irgendeiner weise falsch sein.. machen wir ein Spiel: "findest du den Fehler?" Ich spiele auch mit. ![]() Fehlersymtome: -> Türen reagieren nicht im bezug auf die richtige Area. -> Heftigste Slowdowns -> Türen machen was 'se wollen.. ![]() |
||
Gerhard |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also wenn du in deinem Code noch durchblickst: Respekt.
Ich kann es nicht. Vielleicht solltest du einfach nochmal in Ruhe überlegen, wann was passieren soll (erklärs deiner Freundin, das hilft meistens). Allein dies: if doorway(i) = 1 then Translate .... Ohne (!) dass du doorway(i) in diesem Fall einen anderen Wert zuweist, (Vorgang ist ja wahrscheinlich erledigt) erscheint mir verdächtig... Denn was passiert im nächsten Schleifendurchlauf? Genau. Also: nochmal durchdenken und klar und einfach programmieren. So kann man das kaum nachvollziehen. |
||
erforderlich |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich glaube ich lege einfach mal eine "Kreative-Pause" ein. Hilft manchmal echt stark.. | ||
erforderlich |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
![]() Also: Ich mach das jez so: Code: [AUSKLAPPEN] type door
field auf etc. end type type schalter field etc. end type ;in der mainloop: for each door for eahc schalter ;mach das un das ;un das un das next next dann hat sich das... Mein ihr das funktioniert (hinterher schreieb ich 400 Zeilen code un nix funktioniert...nix gut...) |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein wird es nicht. Weil für jede Tür ALLE Schalter angesehen werden, auch wenn sie garnix mit der Tür zu tun haben.
Verpass dem Tür Type einen Array mit Schalter Types, dann sollts kein Problem sein. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
erforderlich |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Verpass dem Tür Type einen Array mit Schalter Types, dann sollts kein Problem sein. Könntest du mir das mal näher erklären? wie hast du dir vorgestellt das in blitz umzusetzen? einen DIM in einem Type? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group