800x800-as koordináta rendszer kisméretű kirajzolása?
Sziasztok!
Azt szeretném megvalósítani, hogy gyorsan kis méretben kirajzolja a koordinátarendszer tartalmát az oldal.
(ez egy térkép)
Alapból a térképből egyszerre egy 7x7-es részt lehet látni, és ezt a részt lehet mozgatni. Ennek a betöltéssel nincs baj. De szeretnék egy minimapot a térképről.
Mint ilyet. Ebben a játékban egy 800x800-as világ van, aminek ha kicsiben, de kirajzolnám az összes pontját, akkor az nagyon sok idő lenne. Hogy oldja meg ez a játék, hogy ezt a kicsinyített képet a világról ilyen gyorsan megalkossa? Valami olyan algoritmust használ, hogy csoportosítva nézi meg a helyeket, és ahol több ugyanolyan pont is van, akkor a kicsi térképen azt jelzi 1 ponttal, míg ahol kevés, azt nem? Furán fogalmaztam meg tudom, de a lényeget remélem értitek.
Még mindig nem érted, mit akarnak mondani az előzők.
A teljes térkép adathalmazt olvasd be memóriába (egy tömbbe pl) és abból olvasd ki amit meg akarsz jeleníteni. Az idő nagy részét a brutálisan sok adatbázis lekérdezés viszi el. Ha csak egyszer kérdezed le az adatokat, az sokat gyorsít a dolgon. Így persze a memóriát fogja zabálni, de hát valamit valamiért.
Végignézted a kódodat amit a Prog.hu-ra linkeltél ?
echo "<div style='width:1057px;height:1057px;margin:0 auto;padding:0;border:3px solid #000000;'>";
for($mapy = 75;$mapy >=-75;$mapy--)
{
for($mapx = -75;$mapx <= 75;$mapx++)
{
$sql = mysqli_query($db,"SELECT COUNT(*) FROM Locations WHERE X=".$mapx." AND Y=".$mapy."") or die(mysqli_error($db));
$data = mysqli_fetch_array($sql);
if($data[0] == 1)
{
$sql = mysqli_query($db,"SELECT Type FROM Locations WHERE X=".$mapx." AND Y=".$mapy."") or die(mysqli_error($db));
$array = mysqli_fetch_array($sql);
if($array[0] == "Town") $color = "yellow";
else if($array[0] == "Mountain") $color = "grey";
echo "<div class='map' style='background: ".$color.";'><a href='location.php?x=".$mapx."&y=".$mapy."'></a></div>";
}
else echo "<div class='map' background='img/map/default.png'><a href='location.php?x=".$mapx."&y=".$mapy."' ></a></div>";
}
}
echo "</div>";
Szerinted hány lekérdezés van benne ?
Én is kb. ide akartam kilyukadni: 1 db lekérdezés kell, azzal lehúzol minden szükséges adatot. Hogy miért? Mert az SQL lekérdezések a változóműveletekhez képest tetű lassúak. Itt lehet merevlemezművelet is, míg ha benyomod az egészet egy tömbbe, akkor már tisztán RAM-ból dolgozol. És ha ügyesen csinálod, és mondjuk 8 biten tárolod a színt, kétszer 16-on meg a koordinátákat, akkor megúszod az egész 800x800-as képet 3 megabájtból, tömörítetlenül.
200x200-nál meg elég 8 bit a koordinátákhoz, ergo 24 biten elférsz, ami kb. 118 kB, tehát még sokkal kevesebb.
Most nem fogok utánanézni, hogy miként generálod a térképet, de javaslom a kép formátumot. A PHP elég gyorsan tud dolgozni így.
G.
Rendben, utánanézek a képek generálására.
Hogy szabhatom meg a fordítónak, hogy a változó hány bitet foglaljon?
A teljes adatbázis lekérdezésével elértem, hogy 0,2 mp alatt lefusson, bár a kirajzolás még így is 1-2 mp.
Most a képi kirajzolás felé kacsingatok, mert zavaró lehet a böngészőnek, hogy 25000 sor van az oldalon :D
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!