For-Schleifen für arrays

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

erforderlich

Betreff: For-Schleifen für arrays

BeitragMo, März 14, 2005 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Tach,
ein besserer Titel is mir nich eingefallen Laughing
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

BeitragMo, März 14, 2005 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 14, 2005 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
hast du auch eine Vernünftige Lösung? Ich sagte doch das da ein Fehler drin steckt...Mir is beim pinkeln ( Laughing ) aufgefallen, das wenn cih eh nur einen arrayinhalt, z.B. die null überprüfen will unr
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

BeitragMo, März 14, 2005 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 14, 2005 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 14, 2005 23:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 15, 2005 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 15, 2005 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 15, 2005 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Rolling Eyes
 

Dreamora

BeitragDi, März 15, 2005 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 16, 2005 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 16, 2005 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 16, 2005 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Wink

tschüss
 

Dreamora

BeitragMi, März 16, 2005 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 16, 2005 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
scheint aber nicht zu funktionieren... Rolling Eyes
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. Wink

Fehlersymtome:
-> Türen reagieren nicht im bezug auf die richtige Area.
-> Heftigste Slowdowns
-> Türen machen was 'se wollen.. Rolling Eyes
 

Gerhard

BeitragMi, März 16, 2005 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 16, 2005 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube ich lege einfach mal eine "Kreative-Pause" ein. Hilft manchmal echt stark..
 

erforderlich

BeitragDo, März 17, 2005 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Idea (diese Kreativen Pausen helfen unheimlich)
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

BeitragDo, März 17, 2005 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 17, 2005 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group