Autor Zpráva
Teckerg
Profil *
Zdravím,
potřeboval bych udělat hrací mapu, na který by se dalo pohybovat, stavět budovy apod. Problém je, že ta mapa by měla bejt relativně velká. Chtěl bych se proto zeptat, jestli nevíte, jakým způsobem by se přibližně dalo něčeho podobnýho docílit. Nechci samozřejmě žádný kódy, spíš jen napsat, jakou cestou se na to dát, zbytek si vygooglim... Nejsem žádnej profík, jen si tak hraju :)
Napadlo mě celou tu mapu rozpolíčkovat a jednotlivý políčka uložit do mysql tabulky, kdy by jednomu políčku odpovídal jeden řádek, takže by každý políčko mohlo mít i různý atributy (co je na něm postavený apod.), jenomže v tomhle případě by byly možná potřeba miliony řádků (např. když udělám mapu 1000x1000, už jsem na 1000000, že jo :/) a nevim, jak rychle by to pak fungovalo...
Kdyžtak dík :)
whoami
Profil
Není potřeba mít v db všechny řádky.. Jen ty na kterých něco je.. řádek může mít sloupce x, y a budova_id. Předpokládám že nebude budova vedle budovy.. Když pak zobrazuješ mapu tak také není potřeba stahovat vše.. ale jen to co je vidět na konkrétním zoomu.. Například zobrazuješ 25 na 20 políček na stránce.. v url máš např ?x=500&y=-30 od toho odpočítáš něco nahoru/holu a vlevo/vpravo, pomocí tohoto omezení stáhneš co v db je na těcho souřadnicích a počítám že z 500 řádků (čtverečků) bude budova jen v 50-ti z nich.. takže stahuješ jen 50 a to tak náročné není..

Plus pokud se jedná o to že by na neobsazených měl být něaký les nabo kámen tak to už se dá řešit funkcí která po zadání velikosti mapy a aktuální souřadnici vygeneruje podle něakého algoritmu ty statické věci.. popř. může mít parametry kolik procent území má být pokamenováno a kolik polesováno.
Joker
Profil
whoami:
Není potřeba mít v db všechny řádky.. Jen ty na kterých něco je
V závislosti na té aplikaci, někde je potřebe držet informace o všech políčkách (třeba druh terénu a podobně).

Teckerg:
by byly možná potřeba miliony řádků
Pro správně udělanou databázi nejsou miliony záznamů problém. Ono není až tak důležité kolik jich celkově je, spíš jak se s nimi pracuje.
Jestli se většinou bude pracovat s jen relativně malým výřezem mapy, nemusí to být takové drama.
whoami
Profil
Joker:
Počítal jsem s tím že mapa bude 2D a jak jsem psal tak max s něakým stromem a kamenem.. a pro odlehčení db.. Jak už jsem psal by tu byla ta fce která bude podle něakých parametrů tyto statické věci generovat. Pokud je to jinak tak samozdřejmě do db..

Popřípadě pokud to nebude mapa čtverečků.. např. Trav. (online hra) tak se dá použít geometry v MySQL a pracovat ve vektorech.. (http://openlayers.athima.com/ moje db zemí.. [není určeno ke kritice..])
Teckerg
Profil *
Díky moc oběma!
To, že nemusím stahovat vše vím, s tím jsem taky počítal, že stáhnu jen to, co budu potřebovat, ale stejně mám strach, že hledání v tak velkým počtu řádků by mohlo trochu trvat.
A jo, právě že by tam měl bejt nějakej terén, ale jenom jednoduchej (stromy, kameny apod.), zkusím víc popřemejšlet nad tím generováním podle algoritmu. Ale chvíli přemejšlení mi to asi dá, ten terén se totiž samozřejmě nesmí objevovat náhodně, ale pokaždý stejně :)

Jinak, jestli to teda dobře chápu, tak pokud budu mít v databázi klidně miliony řádků obsahujících informace o políčkách, ale vytahovat jich budu vždycky jen několik desítek (max stovek), tak by v tom neměl bejt žádnej zásadní problém? :)
whoami
Profil
Tu funkci jem namýšlel tak že podle parametů? rozměry, poměr kmenů, kamenů a stromů vůči volnému místu vytvoří ten grid se statickými čtverečky.. a v případě že budou parametry fce stejné i obsah čtverečků bude stejný.. aka výstup bude zavislí na vstupu..

A pro tu db.. klidně si skus vytvořit tabulku kde ty data budou a vyzkoušej jak rychle to běží.. stačí si tam vygenerovat něaké náhodná data a poměřit.. když to nebude uspokojivé tak pak můžeš řešit jak to zrychlit..
whoami
Profil
Btw.. pro příklad..: http://blockymap.athima.com/ Je to mapa od -500 do 500 v ose X i v ose Y.. Nezdá se mi to pomalé.. jediné co bylo pomalé bylo vygenerování náhodnejch dat.. (Každé políčko má 25% šanci že na něm bude budova.. V db mám 3 budovy červená, zelená, modrá a každá ta barva má stejnou šanci že bude na políčku)..

Kdyby tam byl bug tak se není čemu divit dělal jsem to narychlo.. Kdyžtak dejte vědět jestli to pomohlo.. Jako inspisace..

A jen tak mimochodem teď je v db 250 tisíc řádků.. a je naplněna jen ze 75%.. do db generuji z localhostu tak je to pomalé.. Ale rendrování na stránku je stále rychlé (při 21 čtverečních)..

A ještě by se to dalo uspíšit pomocí ajaxu.. to co už mám bych si uložil do cache a stáhl jen nové řádky/sloupce + vyrendrovat..
Teckerg
Profil *
Tyjo, omlouvám se, že se ozývám až teď, byl jsem teď dva dny úplně mimo PC :)
Každopádně dík, ten příklad vypadá slibně, rychlost je naprosto v pořádku podle mě :) Je to udělaný teda úplně normálně tak, že jsou v databázi všechny ty políčka a vždycky se jich potřebnej počet vytáhe? Žádnej další fígl v tom neni? Prootže jestli ne, tak to vypadá docela slibně :)
A díky i za tu poznámku o ajaxu, pokud mi to pojede pomalu, najdu si o tom víc :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: