mmofacts.com

Eckpunkte einer Iso staggered map herausfinden

gepostet vor 14 Jahre, 4 Monate von BlackScorp

Hallo leute, ich würde gerne die Eckpunkte einer Iso staggered map herausfinden. besser gesagt die Koordinaten der Eckpunkte.

Bevor hier fragen auftreten was ich vorhabe. Möchte ich gerne erstmal meine vorgehensweise bei der Karte beschreiben.

Ich habe 2 DIV elemente übereinander liegen. der Eine Div ist der sichtbare bereich der andere div unter dem sichtbaren bereich, dient für die Animation meiner Karte. In dem Animationsdiv befinden sich viele mapTile divs. dies habe ich gemacht wegen der jQuery animate() funktion, mit der ist es mir möglich ein einem bestimmten zeitinterval die top und left werte eines divs zu verschieben, ich hatte es ursprünglich auf meine mapTiles angewandt und musste dabei die jQuery funktion each verwenden.. das hat dazu geführt dass alles geruckelt hat und die animation nicht schön aussah, desswegen habe ich um alle mapTiles ein Div gesetzt und nur das Div wird verschoben, die mapTiles sitzen fest in dem Div.

Soweit hat alles funktioniert. Nun möchte ich halt gerne mapTile divs hinzufügen vor der animation, danach kommt die animation, und zum schluss sollen einige divs entfernt werden. also angenommen ich verschiebe meine figur auf der Karte nach Oben / Links, somit wird oben und links die karte um eine reihe an divs vergrößert, das animationsdiv wird verschoben, danach werden unten und rechts eine riehe entfernt.

Um dies zu ermöglichen habe ich vor, je nach dem in welche richtung ich meine figur bewege, einen bestimmten eckpunkt herausfinden, die position des eckpunkts in pixel auselesen, zu der position tilebreite bzw tilehöhe entfernen oder dazuadieren, zu der koordinate des eckpunkts x bzw y werte addieren, damit ich quasi festlegen kann, dass an der stelle ein neues div erscheinen soll mit der koordinate xy. das ganze danach in einer schleife um eine reihe voll zu kriegen.

das ist die theorie... nun zur praxis. bei einer Normalen 2 Karte, kann ich die eckpunkte wunderbar ermitteln wenn ich die spielfigur position, sowie breite und höhe des anzeigebereichs ,kenne. etwa so:

Gelb ist der anzeige bereich, blau ist die spieler position, aqua sind die eckpunkte die ich suche.

so und nun das ganze für ISO

Wie ihr da sehen könnt ist es nicht ganz einfach dort die eckpunkte mathematisch zu ermitteln. zumindestens sehe ich da kein zusammenhand zwischen anzeige höhe/breite und koordinaten des spielers.

Was ich dann später vorhabe ist halt folgendes:

Ich kenne meine Anzeigebreite und meine Spielerposition. ich bewege mein spieler nach oben/links, die karte wird dadurch nach unten /rechts animiert, vor der animation, hole ich mir von den eckpunkt unten/links, die position in pixeln und die koordinaten. danach nehme ich die css eigenschaft left: ziehe davon die tilebreite ab und top lasse ich. somit weis ich wo die reihe anfangen soll. danach starte ich eine schleife bis view hohe und ziehe von der css eigenschaft top die tilehöhe ab. also quasi div für div von unten bis nach oben aufbauen, und das gleich dann für oben. desswegen sind mir die eckpunkte so wichtig denn an denen orientiere ich mich, wo ein neues div drangehängt werden soll und an welcher stelle divs gelöscht werden sollen..

So ich hoffe nun dass ihr mich verstanden habt, und mir weiterhelfen könnt..tut mir leid dass da soviel drumherum geschrieben wurde.. aber ihr müsst verstehen was ich vorhabe um mir zu helfen,denke ich.

MFG BlackScorp

gepostet vor 14 Jahre, 4 Monate von Isogames

vielleicht versteh ich dein Problem nicht ganz, aber kannst du das nicht viel einfacher machen? Die Grösse der Tiles ist doch konstant und die Werte sind bekannt. Also könntest du die Ecke Rechts/Oben z.b. so ermitteln.

X: SpielerPos + 1 1/2 Tilebreite

Y: SpielerPos - 1 1/2 Tilehöhe

gepostet vor 14 Jahre, 4 Monate von BlackScorp

ja , das hatte ich vorher gehabt , dass ich einfach irgendwelche werte zu der x/y koordinate dazuaddierte habe.. das problem ist, dass ich meine map vergrößern wollte(also das anzeigebereich) und plätzlich war alles verschoben, eben deshalb weil ich einfach irgendwelche werte dazu addiert habe nur damit es passt... ich habe jetzt gerade mal so angeschaut , und diese eckpunkte, sind alle gleich weit entfernt, also (hypotenuse-1)/2. -1 weil das mittelfeld nicht mitgezählt werden soll.. ich werde mal morgen mich mal dransetzen und denke dass ich das mit dem satz des pytagoras lösen könnte.

EDIT: habe nun das so gemacht, dass ich die anzahl der divs, die zwischen dem mittelpunkt und dem eckpunkt errechne und diesen wert , je nach dem, in welche richtung verschoben wird, zu den x und y coordinaten des spielers dazu addiert bzw subtrahiert. folgende formel habe ich verwendet

JavaScript:

var calcRadius = function(){
    return Math.round(Math.sqrt(Math.pow($('div.map .content').height(),2)+Math.pow($('div.map .content').width(),2))/Math.sqrt(Math.pow(32,2)+Math.pow(64,2)))-1;
}

ich werde nun weiter rumprobieren.. auf jeden fall war das nicht mein letzter post;)

MFG BlackScorp

gepostet vor 14 Jahre, 4 Monate von BlackScorp

heurika!! ich habs. hier das ergebnis

http://cruel-online.wmw.cc/

username: testuser

pw:123

sind halt noch einige bugs. zb dass der click event nicht während animation immernoch aktiviert ist, und wenn man zu schnell klickt, dann kommt die berechnung durcheinander und die neuen divs, haben irgendwie ein anderen z-index aber ich sitze noch dran..

Auf diese Diskussion antworten