AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rotierendes Array

Ein Thema von Igotcha · begonnen am 12. Jul 2004 · letzter Beitrag vom 14. Jul 2004
Antwort Antwort
Seite 2 von 2     12   
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Rotierendes Array

  Alt 14. Jul 2004, 15:15
Also die Lösung hatte ich ja bereits nun (das Array umkopieren), aber ich glaube, die beiden anderen Kollegen haben das eigentliche Problem nicht gesehen, oder ich habe die Lösung nicht verstanden

Das könnten wir ja nochmal klären.

Beispielarray (2,2) der Tile-Map:

Code:
Array  Arrayindex-Y

1|2|3   0
4|5|6   1
7|8|9   2
Der "Screen" ist jetzt mal 2 Zeilen hoch

Beim Start wird das "Grundarray" angezeigt und am Bildschirm sieht man (s.o. > unsichtbare Zeile):

Code:
Array  Arrayindex-Y

4|5|6   1
7|8|9   2
Jetzt werden die 64x64 Großen Tiles pixelweise nach unten verschoben, so dass sich nach einem "Umlauf" (also 64 Pixel nach unten geschoben) folgendes auf dem Screen befindet:

Code:
Array  Arrayindex-Y

1|2|3   0
4|5|6   1
Der Teil mit 7|8|9 ist unten "rausgefallen" und kommt jetzt aus technischer Sicht wieder oben auf:


Code:
Array  Arrayindex-Y

7|8|9   2
1|2|3   0
4|5|6   1
Programmtechnisch das Problem in eine Do-Loop-Schleife verpackt:

Code:
DO
FOR iY=0 to 2
   FOR iX=0 to 2
       ZEIGE ARRAY([Hier muss der passende Y-Index des Arrays rein], iX),iX*64,(iY-1)*64+iScrollY
       {Das Array wird hier bei jedem Umlauf 3-Mal mit inkrementierenden Y-Werten angesprochen:
       1.1. Durchlauf: 0
       1.2. Durchlauf: 1
       1.3. Durchlauf: 2 
       2.1. Durchlauf: 2
       2.2. Durchlauf: 0
       2.3. Durchlauf: 1
       3.1. Durchlauf: 1
       3.2. Durchlauf: 2
       3.3. Durchlauf: 0
       danach wäre das komplette Array einmal über den Screen gescrollt und wir können wieder bei 1.1 anfangen}
   NEXT iX
NEXT iY
   INC iScrollY
   IF iScrollY > 64 
      iScrollY=0
      {Nach diesem Umlauf muss jetzt die Korrektur des Arrayindex-Y erfolgen, also Änderung des Arrayindex-Y von z.B. 1.1 > 2.1, 2.1 > 3.1 oder 3.1 > 1.1}
   ENDIF
LOOP
Da bringt meiner Meinung nach ein MOD bzw. die Abfrage IF xx > 2 in diesem Falle nichts, oder sehe ich das falsch?

Gruß Igotcha
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#12

Re: Rotierendes Array

  Alt 14. Jul 2004, 16:30
Zitat von neolithos:
Also eins versteh ich auch nicht!

Warum bewegt ihr die Daten im Array???

0,1,2,3,4,5,6,7,8,9,10,12

Würde ich so immer beibehalten. Nur einen Zeiger definieren der mir zeigt, welches Element derzeit das erste ist. Von diesem Element würde ich dann immer die Daten darstellen.

==> Wesentlich schneller als das Array umzukopieren!!!
... das ist doch die eleganteste lösung, du brauchst nix mit dem array zu machen

also:

Code:
 (schematisch)
...
anfang=1
anzeigen(anfang)
..
proceure anzeigen(anfang)
  if anfang<0 then anfang=2
  if anfang>2 then anfang=0
  anzahl=2
  y=anfang
  for n=1 to anzahl do
  begin
    zeige(array(y))
    inc(y)
    if y>2 then y=0
  end
end

Anzeige:

Array  Arrayindex-Y

4|5|6   1
7|8|9   2

hochrücken:

..
dec(anfang)
anzeigen(anfang)
..

anzeige

1|2|3   0
4|5|6   1

... so sollte der ablauf funktionieren ...
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Rotierendes Array

  Alt 14. Jul 2004, 17:13
Könnte funktionieren - hab's aber nicht getestet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz