Problem mit schlaufe

Anfängerfragen zum Programmieren mit PureBasic.
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Problem mit schlaufe

Beitrag von obar »

Hallo zusammen,

habe folgendes Problem.

Ich möchte mir auf dem Screen einzelne Info's anzeigen lassen von Objekten, die ich auf der Map verteilt habe. Nun möchte ich das
mir auf einer Seite z.B 20 Objekte angezeigt werden. Nachher soll man mit Tasten Up/Down nächste Seite anzeigen lassen.

Die Anzeige sieht bis jetzt so aus.

Code: Alles auswählen

If CheckFlag = #True
      ;
      Global r.l, testen.l, color.l = RGB(255,255,255)
      Repeat
      r = 0
      testen = 1
      ClearScreen(0)
      ExamineMouse()
      ExamineKeyboard()
      ;    
      For o = 0 To mapHeight
          For p = 0 To mapWidth
              If map(p,o)\objID > 0
                  StartDrawing(ScreenOutput())
                  DrawingMode(#PB_2DDrawing_Outlined)
                  DrawingFont(FontID(10))
                  Box(200, 1, 400, 580, RGB(255,255,255))
                  DrawingMode(#PB_2DDrawing_Transparent)
                  DrawText(230, 20, "No",     color)
                  DrawText(320, 20, "ObjID",  color)
                  DrawText(375, 20, "ObjPos", color)
                  DrawText(435, 20, "Walk",   color)
                  DrawText(480, 20, "Event",  color)
                  DrawText(523, 20, "Sound",  color)
                 
                  DrawText(220, 40+r, RSet(Str(testen),5,"0"),                     color)
                  DrawText(323, 40+r, RSet(Str(map(p,o)\objID),3,"0"),             color)
                  DrawText(370, 40+r, RSet(Str(p),3,"0")+" / "+RSet(Str(o),3,"0"), color)
                  DrawText(443, 40+r, RSet(Str(map(p,o)\objWalk),1),               color)
                  DrawText(479, 40+r, RSet(Str(map(p,o)\objEvent),5,"0"),          color)
                  DrawText(530, 40+r, RSet(Str(map(p,o)\objSound),3,"0"),          color)
                                
                  StopDrawing()
                  ;
                  DisplayTransparentSprite(map(p,o)\objID, 280,40-1+r)
                  r+20
                  testen + 1
              EndIf
          Next
      Next
      ;    
      FlipBuffers()
      Until KeyboardPushed(#PB_Key_Escape)
      CheckFlag = #False
      ;
  EndIf  
Hier wird natürlich endlos angezeigt, also bis alle Objekte durch sind. Ich bin mir nicht ganz sicher wie ich die Schleife unterbrechen kann,
dass mir nur 20 angezeigt werden.
Bitte variablen Namen nicht beachten, ich weiss dass sie schei.. sind. Soll ja auch nur ein Test sein.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

...Ich bin mir nicht ganz sicher wie ich die Schleife unterbrechen kann...

Code: Alles auswählen

Break
:?:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ne, komplett falsche herangehensweise.
wenn du irgendwelche 20 obj angezeigt haben willst (in ner liste) dann musst du dir ne listenverwaltung proggen.
die muss getrennt sein von deiner game-map darstellung.

ich hab deinen code jetz nich laufen lassen (hab hier kein PB),
aber grundsätzlich rate ich dir zu so einer elementaren unterscheidung.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Beitrag von obar »

Hä, also diese Schlaufe hat nix mit der Map-Darstellung zu tun.

Eigentlich solls so laufen, dass ich Obj. auf der Map setze. Dann kann ich irgendein Button im Editor drücken, der mir in einer
Liste auf einem neuen Screen, alle Obj. aufzeigt die gesetzt wurden.

Dazu lass ich die Schlaufe laufen der den ganzen 2dArray liest und jeweils prüft ob ein Objekt darauf gesetzt wurde.
Wenn der Wert grösser als 0 ist, wird das Objekt in der Liste angezeigt.

Wenn ich nun beispielsweise 1000 Objekte(übertreib :mrgreen: ) setze, ist die Liste natürlich riesig. Deshalb will ich nach z.B.
20 Objekten mit Pfeiltasten eine Seite vor oder zurück blättern können.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo und das is ne spezifische anwendung, die du selber proggen solltest.

also, du musst die darstellung von 20 listenelementen komplett trennen von der darstellung deiner map.
also wird auch die steuerung deiner liste (blättern, etc) komplett getrennt von der steuerung deiner map.

letztendlich unterscheidet sich die berechnung für deine 2D-Map im unteren Layer
nicht sehr stark von der 1D-Liste im draufliegenden Layer.

denk das mal durch was-wo-wann, da kommst du bestimmt drauf, ohne dass dir einer nen code vorlegt...
letzteres wär eh die schlechteste lösung.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Beitrag von obar »

Etwas verstehe ich noch nicht in deinen Ausführungen. Wenn du von Listenelementen sprichts,
dann meinst du aber nicht LinkedList? Weil diese verwende ich gar nicht für meine Objekte.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nein, ich meine die elemente, die du objekte nennst, die du (zwangsweise) in einer liste anordnen wirst,
im gegensatz zu den elementen in der tabelle, die du MAP nennst...

für deine objekte wirst du normalerweise eine 1D-aufzählung anwenden.. nich?
deine map is 2D-angeordnet...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

weiß nich genau ob du sowas meinst, aber ich hab hier so'ne zeilenweise ausgabe für screen: http://www.purebasic.fr/german/viewtopic.php?t=11212
wenn du statt der linkedlist ein 2d-array nimmst (eine dim für ne seite, und die andere dim für die zeilen der seite) könntest du über den seiten-index 'blättern'.
my pb stuff..
Bild..jedenfalls war das mal so.
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Beitrag von obar »

@Kaeru Gaman


Nein, ich habe nur eine Structur, wo Tile und Objekt drin ist(2d). Ich seh schon, ich bin ein Bisschen auf dem Falschen weg. Ich hab in Foren zwar viel gelesen und gegoogelt was tilemap angeht. Aber über die Objekt verwaltung, hab ich praktisch nichts gefunden.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Du musst zuerst einfach mal deine Map rendern, und dann deine gewünschten Objekte drüberzeichnen (die Objekte solltest du in einer LinkedList speichern, für die du als Datentyp ne Structure verwendest, in der z.B. Position auf der Map, SpriteID, Healthpoints, Einheitenname, etc, speicherst ; diese linkedlist wird dann mit ForEach bei jedem Durchlauf der Hauptschleife einmal komplett durchgegangen).
Antworten