Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Tworzenie mapy izometrycznej
Forum PHP.pl > Forum > Przedszkole
!*!
Na jakiej zasadzie tworzy się mapy izometryczne? Chciałbym coś takiego napisać, jednak nie wiem jaką stworzyć pętlę która obliczy konieczne wartośći do zbudowania takiej mapy. Na początke chce poukładać tzw tiles, standardowo tekstura to 64px szerokości na 32px wysokości czyli normalna wartość dla izometrii.

Nie wiem tylko jak stworzyć prostą mapę np 5x5 pól, czyli 25 obiektów "tiles". Biorąc pod uwagę że obiekty są liczone od 0x0 w obu kierunkach.
konole
Tablica dwuwymiarowa.

Kod
for ($i = 0; $i < 5; $i++) {
for ($j = 0; $j < 5; $j++) {
printf("%s:%s ", $i+1, $j+1);
}
echo "<br />";
}


edit: to oczywiście jest przykładowy kod w php, nie js.
!*!
heh a jednak mam z tym problem, bo jak wyliczyć z tego 'szachownice' ?

[JAVASCRIPT] pobierz, plaintext
  1. var TileWidth = 64; // szerokość tekstury
  2. var TileHeight = 32; // wysokość tekstury
  3.  
  4. var MapWidth = 2; // szerokość mapy (liczba pól)
  5. var MapHeight = 2; // wysokość mapy (liczba pól)
  6.  
  7. for (i=0;i < MapWidth;++i)
  8. {
  9. for(j = 0; j < MapHeight; ++j)
  10. {
  11. //printf("%s:%s ", $i+1, $j+1);
  12. //$('#info').append(i+1+':', j+1);
  13. //$('#info').append(' ');
  14. //alert(i+':'+j);
  15. //alert(Math.round(Y*TileHeight/2));
  16. $('#world').append('<div style="background:url(\'tiles.png\') center center no-repeat;position:relative;top:'+Math.round(i-j*TileHeight/2)+'px;left:'+Math.round(i+j*TileWidth/2)+'px;width:'+TileWidth+'px;height:'+TileHeight+'px;">'+i+':'+j+'</div>');
  17. }
[JAVASCRIPT] pobierz, plaintext


Czyli powinno wygenerować

Kod
0,0 0,1
1,0 1,1


I właśnie tak powinny być ułożone divy obok siebie, aby wygenerować rzut izometryczny dzięki img które się w nich znajdują... jednak tak się nie dzieje.

Link do przykładu http://jsfiddle.net/yY7M3/1/
konole
Może tutaj znajdziesz odpowiedź w źródle?

http://h1.ripway.com/qbasic010/public/isomap/isomap.html



!*!
r4xz może i dużo ale nie są wystarczające, większość nie działa poprawnie pod wszytkimi przeglądarkami, albo jest po prostu kobyłą która imituje dawno wprowadzone rozwiązania choćby w html5.
CuteOne
[JAVASCRIPT] pobierz, plaintext
  1.  
  2. var dy = 2, dx = 2, map = '';
  3.  
  4. for(var y = 0; y <= dy; y++) {
  5.  
  6. map += '<div class="mapa_row">';
  7.  
  8. for(var x = 0; x <= dx; x++) {
  9.  
  10. map += '<div class="mapa_cell">'+y+' '+x+'</div>'; // ustaw szerokość, wysokość diva i float: left (żeby się przytulały)
  11. }
  12.  
  13. map += '</div><div style="clear:both"></div>'; // clear:both gdy za bardzo chcą się przytulać ;)
  14. }
  15.  
  16. document.getElementById('conatiner').innerHTML = map;
[JAVASCRIPT] pobierz, plaintext


Tadam..
!*!
CuteOne taki efekt uzyskałem już dawno, nakierował mnie konole - wystarczyło zmienić kilka rzeczy pod JS aby działało, co z resztą zrobiłeś podobnie (a ja podałem już link do 'działającej' wersji), chodzi o odpowiednie rozmieszczenie tych divów tak aby tworzyły rzut izometryczny http://jsfiddle.net/yY7M3/1/ czyli obliczyć +- wysokość i szerokość tile, nadać temu top i left.
thek
Tylko uważaj na RAm wink.gif Ja kiedyś zrobilem mapę około 6000 kafli to wcięło prawie 3GB RAM biggrin.gif
!*!
thek od tego mam już napisaną strefę buforową, widzisz tylko to co potrzeba.

eduit, mój błąd, konole podał mi rozwiązanie http://h1.ripway.com/qbasic010/public/isomap/isomap.html jednak u siebie podałem złe wartości, teraz działa.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.