Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-09-2003, 14:16   #1 (permalink)
Uncle Rico
 
Registriert seit: Aug 2003
Ort: Köln
Beiträge: 196
Question Iso-Frage (Z-Sortierung)

Hallo!

Ich stelle jetzt eine Frage zu isometrischen Spielfeldern. Die Leute, denen das Thema schon seit Monaten zum Halse raushängt, sollten also schnell zum nächsten Thread weiterklicken :-)

Es geht um die Tiefensortierung der einzelnen Felder. Ich habe dazu mit Hilfe der Forumssuche eine Funktion oder einen Prototypen gefunden, der die Felder in etwa so aufbaut:

Code:
var i = 0;
for (x = 0; x < playfieldWidth; x++) {
	for (y = 0; y < playfieldHeight; y++) {
		this.attachMovie(bla,bla, i++);
	}
}
Die level der einzelnen Spielfelder sähen dann so aus:

Code:
....0....
.../.\...
..1...3..
./.\./.\.
2...4...6
.\./.\./.
..5...7..
...\./...
....8....
Das funktioniert prima zum Aufbau des Spielfeldes. Ich habe dann die Schrittweite der Variablen i auf 2 erhöht und kam dann zu folgenden Tiefen:

Code:
....0....
.../.\...
..2...6..
./.\./.\.
4...8..12
.\./.\./.
.10..14..
...\./...
...16....
Das hatte ganz einfach den Vorteil, dass ich zusätzlich noch Spielfiguren auf das Spielfeld setzen konnte, jeweils mit dem level des drunterliegenden Spielfeldes + 1. Also eine Figur in der Mitte des Feldes hätte dann level 8+1=9 und würde die weiter oben liegenden Felder überdecken und von den weiter unten liegenden Feldern selber überdeckt.

Soweit so gut. Nun bin ich aber auf die Idee gekommen, die Spielfelder nicht nur als Fläche zu zeichen, sondern den Teilen eine Höhe zu spendieren. Damit konnte ich dann Blöcke im Spielfeld zeichnen, die als Mauern dienen sollten. Das geht auch alles noch, sowohl die Spielfelder als auch die Figuren überlappen sich richtig, so lange sich die Spielfigur auf einer festen Position befindet !
Fange ich nun an, die Spielfigur zwischen einzelnen Spielfeldern zu bewegen bekomme ich Probleme.

Beispiel:

Spielfigur befindet sich zwischen den Feldern mit dem level 6 und 12

Code:
....0....
.../.\...
..2...6..
./.\./.*. <-- Spielfigur
4...8..12
.\./.\./.
.10..14..
...\./...
...16....
Wähle ich level 7 (6+1) für die Spielfigur, so wird sie von dem Feld mit Level 9 überzeichnet.
Wähle ich level 13 (12+1) für die Spielfigur, so überzeichnet die Figur das Feld mit Level 8.

Alles nicht so wie ich es haben will. Dann habe ich ein Beispiel von OutsideOfSociety http://oos.moxiecode.com/ gefunden. Dort wird in etwa folgende Schleife zum Aufbau des Feldes benutzt:

Code:
for ( var i=0; i < mapH; ++i ) {
    for ( var j=0; j < mapH; ++j ) {
        var d = (i*tileH) + (j*tileW) + i;
        this.clip.attachMovie("tile", "t_"+i+"_"+j, d);
        ...
Das führt dann zu folgender Sortierung:

Code:
....0....
.../.\...
..3...4..
./.\./.\.
6...7...8
.\./.\./.
.10..11..
...\./...
...14....
Diese Sortierung hat den Vorteil, dass die level einer (diagonalen) Reihe (z.B. 6-7-8) zum einen fortlaufend sind und zum anderen jeweils größer als sämtliche Elemente der Reihe darüber (3-4). Was mich nur stört ist, dass die level insgesamt nicht fortlaufend sind. Was ich schöner finden würde wäre folgendes:

Code:
....0....
.../.\...
..1...2..
./.\./.\.
3...4...5
.\./.\./.
..6...7..
...\./...
....8....
Nur leider komme ich auf keine Formel, die mir das Spielfeld mit genau diesen Tiefen aubaut und da liegt mein Problem. Wie erzeugt man mit zwei Schleifen die richtige Zahlenreihe? In diesem Besipiel wäre das 0-1-3-2-4-6-5-7-8.
Wenn mir da irgendwer weiterhelfen könnte, wäre ich echt dankbar !!!

Nur der Vollständigkeit halber: Mir ist inzwischen auch aufgefallen, dass ich das Spielfeld nicht so aufbauen kann, dass ich eine Tiefensortierung vollständig vermeiden kann. Dass ich Sortieren muss, je nach dem ob sich meine Spielfigur links oder rechts an einem Mauerblock vorbeibewegt ist mir klar.

So, viel Text, hoffentlich kann mir überhaupt jemand folgen :-)
Karuma ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele