[PHP] Wereld map in webgame genereren met veel info*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WebRaider
  • Registratie: Maart 2003
  • Laatst online: 27-02 15:30

WebRaider

There's Always a way

Topicstarter
Ik ben bezig een soort van Massive Multiplayer Game te maken in PHP.
Hiervoor wil ik zoveel mogelijk 2D hebben.
Dus mijn stad moet 2D zijn zodat je kan beslissen waar je welk gebouw plaatst.
Ook moet het mogelijk zijn om de gehele wereld en of een land appart te bekijken (soort van zoom).

Mijn 1e idee was, om de volledige wereld in te delen in kleine vierhoekjes, waar er kan op gebouw worden, en dat je per stad dan standaard 50 hokjes hebt om je ding op te doen enz.

Probleem is dat als je dat wil weergeven in een image die gemaakt is via PHP, je enorm veel resources nodig hebt, en de server dus ongeloofelijk belast.

Zeker als je de gehele wereld wilt zien, moet je alle hokjes laden en op die image laten drukken.
Dat is dus zo goed als niet doenbaar voor de server.

Heeft iemand een ander idee, hoe ik dit beter kan doen? Om dus te zorgen dat je je stad 2D kan zien, met per hokje wat er zich in bevind (gebouw, boom, rivier). Maar ook dat je de gehele wereld kan zien en eventueel een deel kan "zoomen".

Bedankt op voorhand !!

WebRaider


Acties:
  • 0 Henk 'm!

  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 05-09 21:19

Wacky

Dr. Lektroluv \o/

Misschien kun je een tabel maken met hokjes van bv. 100x100px en dat je daar iedere keer via php het bijhehorende plaatje ophaalt?

Nu ook met Flickr account


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je hoeft de images toch niet in één plaatje aan elkaar te plakken? Maak gewoon een paar losse plaatjes (die men tiles noemt, en een engine die ermee om kan gaan heet een tilemap engine), en zet die plaatjes gewoon met HTML naast/onder elkaar. Kost je geen rekenkracht met GD, en als je tiles goed zijn, dan ziet niemand er wat van. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • WebRaider
  • Registratie: Maart 2003
  • Laatst online: 27-02 15:30

WebRaider

There's Always a way

Topicstarter
Wacky schreef op woensdag 08 juni 2005 @ 15:37:
Misschien kun je een tabel maken met hokjes van bv. 100x100px en dat je daar iedere keer via php het bijhehorende plaatje ophaalt?
Is wel een goed idee... Miss kan'k het combineren met een vooral gemaakte image als achtergrond...

WebRaider


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:01
Op zich lijkt -NMe-'s suggestie me al geschikt, maar als je toch het totaalbeeld met PHP genereerd, dan zou je het op z'n minst kunnen cachen: het plaatje hoeft alleen gegenereerd te worden als er een nieuw gebouw op gezet wordt.

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Die overview maak je niet door een 20000x20000 gifje te laten zien en dan een height=200 mee te geven. Da's net zo fout als hier op GoT je thumbs met een height attribuut te maken.

Eventueel kun je natuurlijk zaken combineren: een wijk van 16 gebouwen pre-renderen en cachen, en vervolgens je stad uit die wijken laten opbouwen. Dat voorkomt overhead voor kleine plaatjes.

Een laatste twijfelgeval is of GD (en de browser) slim genoeg is om door te hebben dat al je GIFjes hetzelfde palet gebruiken. Je kunt dus efficient combineren, en hoeft geen palettering te doen bij het aanmaken.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • Tjeemp
  • Registratie: Januari 2005
  • Laatst online: 03-01-2015

Tjeemp

BEER N TEA

ik zou verschillende tiles maken afhankelijk van het niveau van inzoomen. dan heb je bij ver uit gezoomd gewoon evenveel tiles maar gewoon andere plaatjes dan dat je ingezoomd hebt...

zou toch goed moeten werken, en heb je ook niet veel last van resizen

www.timovanderzanden.nl | Beer 'n' Tea


Acties:
  • 0 Henk 'm!

Verwijderd

Hoe ik het aan zou pakken;
Standaard ziet men een overview van het gebied, bijvoorbeeld met tiles (floating divs) van de afmeting 10x10 pixels en binnen een gebied van 500x500 pixels (is 2.500 tiles). Als men vervolgens inzoomt, dan krijgt men tiles te zien met de afmeting 40x40 (zoomfactor vier, veel meer detail dus). Het scrollen binnen het gebied, als ingezoomd is, kun je realiseren met javascript en div-elementen (werk met overflow e.d.).

De div's kun je vullen met kleur (groen is gras, grijs zijn wegen, etc.) en eventueel met een afbeelding (gif-je) als er een gebouw of iets dergelijks op staat. Je zult dus voor alle grafische tiles (gebouwen e.d.) twee tiles moeten maken; één van 10x10 pixels en één van 40x40 pixels.

Als je niets te doen hebt kun je natuurlijk meerdere zoomfactoren inbouwen maar zul je tevens verschillende tiles moeten maken.

Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47

killercow

eth0

Ik doe het zo:
Afbeeldingslocatie: http://www.pc-gamers.com/webgamex/screenshots/features_engine_0.5.jpg

kijk eventueel voor meer info:
http://fv.triscore.com/wiki/ , daar hebben we de nodige info neer gegooid die ons nuttig leek te zijn voor een mmorpg

Deze tiles zijn dus isometrisch, en met een in php+gd gebouwde "3d" engine met flat-shading gerenderd. (is wel zwaar voor de browser, dus we zijn bezig met grotere files waaruit de kleinere afbeeldingen clippen)

[ Voor 31% gewijzigd door killercow op 09-06-2005 13:07 ]

openkat.nl al gezien?

Pagina: 1