Toon posts:

[UML, gamedesign] Welke klasse beheert gameobjecten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik hoop dat de titel duidelijk genoeg is, zo niet dan zal het hopelijk snel genoeg duidelijk worden.

Ik ben bezig met een relatief eenvoudig rpg spelletje, vergelijkbaar met nethack, angband en dat soort spellen. Nu ben ik nog bezig met een implementatiemodel in UML en ik zit een beetje vast op een bepaald punt.

Ik heb een klasse World, deze bestaat uit Levels, en Levels bestaan dan weer uit Cells. Een Cell is een vakje van een bepaalde grootte die een of meer GameObjecten kan bevatten. Een GameObject is bijvoorbeeld een wapen, een potion, een muur, een monster de speler etc.

Nu was mijn vraag wie laat ik de GameObjecten managen. Ik dacht zelf eerst aan de World klasse. Deze houdt alle levels bij en zou dus hierbij ook bij kunnen houden welke GameObjecten er zijn en waar deze zich bevinden. Maar op zich zou dit natuurlijk ook in een Cell kunnen. Deze bevat namelijk de objecten. Zelfs Level leek me nog mogelijk :?

Ik heb hier nu al een tijdje over zitten twijfelen maar ik kom er echt niet uit. Ik kan ook geen soortgelijke voorbeelden vinden met Google. Hopelijk heeft iemand hier een idee.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14-04 03:50
De vraag is eerder, denk ik, wat je bedoelt met 'managen'? Een spelobject ligt waarschijnlijk gewoon in een cel (heeft een 'cel'-attribuut dus), en een cel weet in welk level 'ie zit (en welke buren 'ie heeft) en het level weet van welke wereld het deel uitmaakt. Behalve dat je ze moet kunnen 'vinden' (door bijvoorbeeld alle items in een level op te kunnen vragen) maakt het niet zoveel uit wie er referenties naar heeft.

Dat kunnen de cellen zijn, maar zoals je zelf zegt ook de levels of de wereld. Het maakt niet heel veel uit. Het meest logisch lijkt mij om elke cel te laten bijhouden welke voorwerpen er in liggen, omdat het voorwerp omgekeerd ook weet in welke cel hij ligt. Daarvan afwijken kan echter best zinnig zijn, om performance redenen, of omdat je geen concreet celobject hebt (maar dat heb je wel).

Merk op dat als een cel weet welke voorwerpen 'ie heeft, je de voorwerpen in een level kunt vinden door alle cellen in het level af te gaan en de voorwerpen daarin te verzamelen (want een level weet toch al welke cellen 'ie bevatt). Omgekeerd kun je, als de wereld bijhoudt welke voorwerpen er bestaan, ook de voorwerpen in een level vinden door alleen die voorwerpen te selecteren wiens cel in het gewenste level ligt. Het maakt zo bezien dus niet veel uit hoe de datastructuur organiseert.

[ Voor 26% gewijzigd door Soultaker op 17-01-2006 19:46 ]


Verwijderd

Ik zou gewoon elke cell een lijst met GameObjecten bij laten houden. De meest gedistribueerde methode lijkt me in dit geval de beste, omdat je zo makkelijk de GameObjecten per level (verzameling van alle GameObjecten van de cellen in dat level) en per wereld (idem, alleen dan per level) kan samenstellen.

Als je ook nog vaak wilt zoeken of een GameObject voor komt in een level/een wereld, zou je ervoor kunnen kiezen om een dubbele administratie bij te houden en ook nog een lijst GameObjecten in het level/de wereld op te nemen.
Soultaker schreef op dinsdag 17 januari 2006 @ 19:45:
*knip*

Merk op dat als een cel weet welke voorwerpen 'ie heeft, je de voorwerpen in een level kunt vinden door alle cellen in het level af te gaan en de voorwerpen daarin te verzamelen (want een level weet toch al welke cellen 'ie bevatt). Omgekeerd kun je, als de wereld bijhoudt welke voorwerpen er bestaan, ook de voorwerpen in een level vinden door alleen die voorwerpen te selecteren wiens cel in het gewenste level ligt. Het maakt zo bezien dus niet veel uit hoe de datastructuur organiseert.
De tweede optie is toch veel minder handig, omdat je dan ALLE objecten in de wereld af moet lopen, terwijl in het eerste geval je alleen de objecten van het huidige level af moet lopen.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14-04 03:50
Wat het handigst is hangt een beetje af van de verhouding objecten t.o.v. de wereld. In NetHack heeft een level (ik geloof niet dat er een globale wereld is) toch wel een paar duizend cellen terwijl het aantal voorwerpen (monsters, items, etc.) veel lager is; je moet dan een paar duizend cellen af om misschien honderd objecten te vinden.

Maar je hebt gelijk dat ze in de wereld stoppen waarschijnlijk niet zo handig is; de eerste optie was ook mijn favoriet.

Verwijderd

Topicstarter
Denk dat dat het dan ook maar gaat worden. De Cell houdt bij welke voorwerpen hij bevat. Nu kan ik eindelijk een stapje verder gaan in mijn ontwerp =]

Bedankt