Markuz Opublikowano 5 Maja 2010 Udostępnij Opublikowano 5 Maja 2010 Witam serdecznie! Chciałem nieco poprawić wydajność mojego skryptu mapki, i postanowiłem wszystko przenieść do pliku - lecz życie nie jest tak piękne jak mi się wydawało heh , zamiast raz wczytać plik który ma ok. 250 kB (Tablice z danymi mapki), to muszę go wczytywać za każdym razem jak chce odświeżyć mapę. Dam troszkę kodu: Plik: Panel.map.php ( Ten plik jest wczytywany do diva o id MAP ) <?php session_start(); $x=$_SESSION['x']; $y=$_SESSION['y']; include('mapdata.php'); <=====================================TUTAJ echo $_SESSION['x']; echo $_SESSION['y']."<br/>"; echo "<img src='img/map/".$map_data[$x-5][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y+3].".PNG' width='32'>"; echo "<br/>"; //1 linijka echo "<img src='img/map/".$map_data[$x-5][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y+2].".PNG' width='32'>"; ... I tak dalej :) ?> Plik site.js function show_map(){ var req = mint.Request(); req.Send("panel.map.php", "map"); } var gotowy=true; function start() { gotowy=true; document.getElementById('ready').innerHTML=""; } function go(where) { var req = mint.Request(); req.Send("ruch.map.php?a="+where, "ruch"); show_map(); } function przechwyc(e) { var event = window.event || e; switch(event.keyCode){ case 83: go("down"); break; case 87: go("up"); break; case 68: go("right"); break; case 65: go("left"); break; } } document.onkeydown = przechwyc; A to część pliku z grą : <div id='map'></div> <div id='ruch'></div> A chciałem żeby było tak: <?php include('mapdata.php'); ?> <div id='map'></div> <div id='ruch'></div> Wie ktoś jak zrobić aby plik mapdata.php nie wczytywał się za każdym razem? Jedynym plusem jest to że mapka może być wielka a to i tak zżera prawie tyle samo :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 5 Maja 2010 Udostępnij Opublikowano 5 Maja 2010 Wie ktoś jak zrobić aby plik mapdata.php nie wczytywał się za każdym razem? http://php.net/manual/en/function.include-once.php :) Szczerze, nie za bardzo rozumiem Twojego problemu. Ładujesz mapę z pliku PHP i za każdym wywołaniem skryptu PHP MUSISZ ją ładować. Chyba, że przeglądarka będzie przechowywać niektóre informacje za pomocą JS. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markuz Opublikowano 5 Maja 2010 Autor Udostępnij Opublikowano 5 Maja 2010 Yhy, czyli nie da się zrobić tak żeby za każdym razem nie wczytywało pliku? ;> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 5 Maja 2010 Udostępnij Opublikowano 5 Maja 2010 Jeśli PHP ma mieć dostęp do tego typu danych to musi je ładować za każdym razem. Oczywiście wystarczy załadować Ci tylko określony fragment mapy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markuz Opublikowano 5 Maja 2010 Autor Udostępnij Opublikowano 5 Maja 2010 A w java script jakbym zrobił tablice to nie musiało by ich od nowa ładować czy też by musiało? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 5 Maja 2010 Udostępnij Opublikowano 5 Maja 2010 Nie, bo przeglądarka by przechowywała takie informacje. Kwestia tego jak dużo danych masz do przetworzenia, jakie to informacje, etc.. Jeśli ładujesz tylko "budowę" mapy, która się nie zmienia w żaden sposób, to możesz próbować ładować ją do JS. Trudno Ci pomóc, nie wiem co robisz, czego oczekujesz, czy jak to ma wyglądać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markuz Opublikowano 6 Maja 2010 Autor Udostępnij Opublikowano 6 Maja 2010 Heh plik którego nie chce ładować za każdym razem zawiera tablice (około 10 000)m każda z nich składa się z X,Y oraz S ( Stylu ) : To jest część tego pliku, pierwszy nawias klamrowy to X, drugi to Y , a wartość tablicy to Styl. $map_data[56][62] = 0; $map_data[56][63] = 0; $map_data[56][64] = 0; $map_data[56][65] = 0; $map_data[56][66] = 0; $map_data[56][67] = 0; $map_data[56][68] = 0; $map_data[56][69] = 0; $map_data[56][70] = 0; $map_data[56][71] = 0; $map_data[56][72] = 0; $map_data[56][73] = 0; Następnie w pliku który odświeżam ( Gdy bohater się porusza ) są dane o wyświetlaniu mapki ( Graficznie ) czyli funkcje echo i img. <?php session_start(); $x=$_SESSION['x']; $y=$_SESSION['y']; include_once 'mapdata.php'; echo "<img src='img/map/".$map_data[$x-6][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-5][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y+5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+6][$y+5].".PNG' width='32'>"; echo "<br/>"; echo "<img src='img/map/".$map_data[$x-6][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-5][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y+4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+6][$y+4].".PNG' width='32'>"; echo "<br/>"; echo "<img src='img/map/".$map_data[$x-6][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-5][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y+3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+6][$y+3].".PNG' width='32'>"; echo "<br/>"; //1 linijka echo "<img src='img/map/".$map_data[$x-6][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-5][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y+2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+6][$y+2].".PNG' width='32'>"; echo "<br/>"; //2 linijka echo "<img src='img/map/".$map_data[$x-6][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-5][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y+1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+6][$y+1].".PNG' width='32'>"; echo "<br/>"; //3 linijka echo "<img src='img/map/".$map_data[$x-6][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-5][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+6][$y].".PNG' width='32'>"; echo "<br/>"; //4 linijka echo "<img src='img/map/".$map_data[$x-6][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-5][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y-1].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+6][$y-1].".PNG' width='32'>"; echo "<br/>"; //5 linijka echo "<img src='img/map/".$map_data[$x-6][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-5][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y-2].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+6][$y-2].".PNG' width='32'>"; echo "<br/>"; //6 linijka echo "<img src='img/map/".$map_data[$x-6][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-5][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y-3].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+6][$y-3].".PNG' width='32'>"; echo "<br/>"; //7 linijka echo "<img src='img/map/".$map_data[$x-6][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-5][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y-4].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+6][$y-4].".PNG' width='32'>"; echo "<br/>"; //8 linijka echo "<img src='img/map/".$map_data[$x-6][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-5][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-4][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-3][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-2][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x-1][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+1][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+2][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+3][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+4][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+5][$y-5].".PNG' width='32'>"; echo "<img src='img/map/".$map_data[$x+6][$y-5].".PNG' width='32'>"; echo "<br/>"; ?> Aktualnie X i Y to Sesja ale to się zmieni. Czyli podsumowując: - Co robię? Mapkę do gry dynamicznej przez przeglądarkę typu Kosmiczni itp. - Czego oczekuję? Oczekuję by mój skrypt działał na tyle szybko by nie zniechęcał do grania - Jak ma to wyglądać? To już jest w pliku z echo i <img> . Ma to być prostokąt składający się z obrazków których SRC jest pobierane z tej właśnie tablicy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 6 Maja 2010 Administratorzy Udostępnij Opublikowano 6 Maja 2010 serialize, unserialize, for Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markuz Opublikowano 6 Maja 2010 Autor Udostępnij Opublikowano 6 Maja 2010 Wyświetlanie mapki udało mi się zrobić w pętlach: for( $yy = 6; $yy >= 0; $yy-- ) { //Wysokość górnej części mapy for ($xx = 7; $xx >= 0; $xx --) { //Szerokość $xxx = $x-$xx; $yyy = $y+$yy; echo "<img src='img/map/".$map_data[$x-$xx][$y+$yy].".PNG' class='editor-img' onclick='zmien(".$xxx.",".$yyy.")' >"; } for ($xx = 1; $xx <= 7; $xx ++) { //Szerokość $xxx = $x+$xx; $yyy = $y+$yy; echo "<img src='img/map/".$map_data[$x+$xx][$y+$yy].".PNG' class='editor-img' onclick='zmien(".$xxx.",".$yyy.")' >"; } echo "<br/>"; } for( $yy = 1; $yy <= 6; $yy++ ) { for ($xx = 7; $xx >= 0; $xx --) { //Szerokość $xxx = $x-$xx; $yyy = $y-$yy; echo "<img src='img/map/".$map_data[$x-$xx][$y-$yy].".PNG' class='editor-img' onclick='zmien(".$xxx.",".$yyy.")' >"; } for ($xx = 1; $xx <= 7; $xx ++) { //Szerokość $xxx = $x+$xx; $yyy = $y-$yy; echo "<img src='img/map/".$map_data[$x+$xx][$y-$yy].".PNG' class='editor-img' onclick='zmien(".$xxx.",".$yyy.")' >"; } echo "<br/>"; } Ale mam jeszcze 1 pytanie ( Oprócz tamtego bo jeszcze nie rozkminiłem tych funkcji co mi podałeś :) ) : Jak mam ten plik z tablicami w php, i chce edytować 1 tablice np. która będzie zaczynać się tak: $map_data[56][70] = 0; i chce zmienić z 0 na 1. Jakiej funkcji operacji na plikach użyć ? PS. Do czego jest ta funkcja serialize(); ? Żeby wszystkie dane z tabeli pobrać do jednej zmiennej? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 6 Maja 2010 Administratorzy Udostępnij Opublikowano 6 Maja 2010 Tak, jako ciąg znaków (jeden string), a unserialize to odwraca. Pamiętaj, że tablice sobie możesz łączyć, rozdzielać itp. więc możesz np. zapisywać tylko ich kawałki, albo dla każdego gracza jego obecną mapę osobno. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markuz Opublikowano 6 Maja 2010 Autor Udostępnij Opublikowano 6 Maja 2010 Yhym, a jak byś jeszcze mógł odpowiedzieć na to 2 pytanie z zapisem :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 6 Maja 2010 Udostępnij Opublikowano 6 Maja 2010 Macie beznadziejne pomysły. <?php class Map { private $handle, $width, $height, $size; public function __construct( $file, $width = 50, $height = 50 ) { $this->width = $width; $this->height = $height; $this->size = $width * $height; if( file_exists( $file ) ) { if( !( $this->handle = @fopen( $file, 'r+' ) ) ) throw new Exception( 'Unable to open map file' ); } else { if( !( $this->handle = @fopen( $file, 'w+' ) ) ) throw new Exception( 'Unable to crate map file' ); fseek( $this->handle, $this->size - 1, SEEK_SET ); fwrite( $this->handle, chr( 0 ) ); fseek( $this->handle, 0, SEEK_SET ); } } public function get( $x, $y ) { $position = $x + $y * $this->width; if( $position < 0 || $position > $this->size ) throw new Exception( 'Reading position out of range' ); fseek( $this->handle, $position - 1, SEEK_SET ); return ord( fread( $this->handle, 1 ) ); } public function set( $x, $y, $value ) { $position = $x + $y * $this->width; if( $position < 0 || $position > $this->size ) throw new Exception( 'Writing position out of range' ); fseek( $this->handle, $position - 1, SEEK_SET ); fwrite( $this->handle, chr( $value ), 1 ); } public function __get( $name ) { if( $name == 'width' || $name == 'height' || $name == 'size' ) return $this->{$name}; } public function __destruct() { fclose( $this->handle ); } } $map = new Map( 'map.bin', 20, 10 ); $map->set( 4, 3, 255 ); $map->set( 4, 4, 255 ); $map->set( 4, 5, 255 ); $map->set( 5, 4, 255 ); $map->set( 6, 4, 255 ); $map->set( 7, 4, 255 ); echo '<table>'; for( $y = 0; $y < $map->height; $y++ ) { echo '<tr>'; for( $x = 0; $x < $map->width; $x++ ) { if( $map->get( $x, $y ) ) echo '<td>X</td>'; else echo '<td> </td>'; } echo '</tr>'; } echo '</table>'; ?> Prosta klasa mapy z przykładem. Wtedy nie musisz ładować całego pliku tylko czytasz to co Ci potrzebne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 6 Maja 2010 Filar Społeczności Udostępnij Opublikowano 6 Maja 2010 Jeszcze wracając do głównego pytania tematu - przecież raz inkludujesz mapę, tak jak to Tymon napisał. Zapewne chodzi Ci o to, żeby za każdym wywołaniem strony php nie przetwarzało tego pliku, tak? Nie da się ze względu na specyfikę hostowania stron php -> skrypt jest odpalany kiedy jest wywoływany, a zakończeniu zamykany. Żeby osiągnąć co chcesz, to byś musiał pomyśleć nad skryptem php działającym w trybie cli, czyli napisać aplikację serwerową działającą 24/h jako osobny proces na (a php jest lipne pod tym względem). Ewentualnie zainteresuj się przerzuceniem na alternatywne środowiska, gdzie aplikacje www są procesami działającymi w tle - asp.net, zope itd. Ja nie widzę jednak problemu w twoim przypadku. Nie musisz dokonywać żadnych zmian w twoich skryptach php, by osiągnąć przybliżoną funkcjonalność. Wystarczy że zostanie dograny jakiś moduł keszujący w stylu eaccelerator, xcache czy apc i odpowiednio skonfigurowany, by skrypty php leżały sobie jak najczęściej w pamięci w formie skompilowanej do bajtkodu. Wtedy żadne fizyczne odczyty z dysku nie mają miejsca. Kłopot jest jednak w tym, że Ty chcesz dynamicznie zmieniać wartości mapy, czyli musisz manipulować tym plikiem jak zwykłym plikiem tekstowym. A im więcej będziesz dokonywał zmian, tym rzadziej plik będzie keszowany, do tego dochodzą różne warianty położenia graczy na mapie, więc pamięc keszująca szybko zostanie wyczerpana i tyle będzie z optymalizacji. Co ostatecznie zrobić? 1) Jak Tymon napisał - obsługiwać plik binarnie a nie czysto tekstowo. Jednakże to też nie jest szybkie rozwiązanie. 2) Najlepszym wyjściem będzie postawienie serwera memcached (prosta baza klucz->wartość) gdzie będziesz trzymał całą mapę i okresowo zrzucał ją do pliku jako backup (bo memcached to "pamięć ulotna"). Wtedy wydajność Twojej aplikacji wzrośnie "masakrycznie" przy większej liczbie równoległych połączeń. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się