IBGDB
Die Indie Browsergame Datenbank - Unabhängig & Ehrlich.
you are not logged in
Login

Karten laden

SunPMCESTECEST1AugE
Karten laden  

In meinen Spiel, basierend auf HTML5 Canvas in isometrischer 2d darstellung, geht es hauptsächlich darum verschiedene Dungeons im Zelda-Rätsel-Stil zu lösen. ( wem zelda nix sagt, man muss verschiedene gegner besiegen, durch rätsel schlüssel oder andere gegenstände suchen um neue räume bis zum endgegner zu öffnen, ich sage gleich mal dazu dass man manche räume gefühlt 100te male betritt und nicht immer raum nach raum löst.)

Die Dungeon können zwar theoretisch unendlich groß werden (vom editor her gibt es keine beschränkungen der räume etc), aber sie werden so auf 1 bis max 3 stunden spielzeit ausgelegt sein. (etwa 30-40 räume max.)

Zur zeit ist es so (teils geplant, teils umgesetzt):

Am anfang lädt man das komplette dungeon, d.h. aus allem benötigten tiles und anderen bildern wird 1 sheet + eine dazugehörige jsonconfig(wegen animationen und bildgrößen etc) generiert. Außerdem wird noch die gesamte mapconfig geladen. für alle räume wird ein mapobject erstellt das ich bei bedarf ein und ausblenden kann ( um räume zu wechseln,...)

Es wird nur ab und zu mit dem server abgeglichen um cheating zu vermeiden (über socket.io), aber sonst keine räume nachgeladen.

Der Vorteil is, wenn man zum beispiel für ein rätsel die selben 3 räume mit verschiedenen schaltern drin etwa 10 mal hintereinander betreten muss, müssen sie nicht extra nachgeladen werden. Außerdem hab ich nur 3 dateien die am anfang geladen werden, sonst nur abgleiche die nicht so viel traffic verursachen.

ich könnte zwar auch die räume einzelnd nachladen und dann cachen aber dann gibt es wieder chaos mit den stylesheets

außerdem wollte ich vor jedem dungeon eine kurze werbeeinblendung machen, so 5 sek, im hintergrund kann dann alles geladen werden.

Hab aber trotzdem irgendwie bedenken bei meinem vorhaben, was meint ihr dazu

mfg Yanko

MonAMCESTECEST1AugE
 

du könntest es doch auch so umsetzen wie bei Diablo2 . Um nicht viele Daten speichern zu müssen bezüglich dungeons werden alle Dungeons zufällig generiert. sobald du eine Spielfigur erstellst wird ein Random seed erzeugt dadurch hat jede spielfigur ihren eigenen dungeon es werden dabei ledeglich bestimmte regeln gesetzt für besondere räume mit aufgaben zb raum typ1 , töte alle monster erst dann gehen türen auf, raum typ2 benutze schalter um tür zum nächsten raum zu öffnen usw.. es werden bestimmte raumtypen eingestellt und das komplette dungeon wird random generiert, somit würde der spieler jedes mal eine "neue" karte zu sehen bekommen. und du hättest weniger daten zum speichern.

 

für das laden des dungeons kannste ja bestimmte algorithmen umsetzen die zb bei Dungeon Crawlern verwendet werden, dabei werden zwar nur strings erzeugt wie # = wand @ = tür, * = boden aber die strings kannste ja dann mit bildern ersetzen.

ich vermute aber dass die schwierigkeit nicht beim dungeon liegen wird sondern eher bei der Balance von monstern/items usw. eventuell wirste noch Probleme im Performance bereich kriegen. Ich selbst sitze schon etwas länger an einer Isometrischen karte mit mehreren Layern , wenn bei dir die räume fix sein werden und sich NUR die spielfigur bewegt, ist es kein Problem, sobald du aber deine Figur fix positionierst und den gesammten raum bewegst wird es schon schwieriger mit der Performance.

viel spaß bei der umsetzung;) falls du grafiken benötigst, findest du bei flarerpg.com viele grafiken wie dungeon tilesets/animierte rüsstungen weiblich/männlich , animierte waffen GUI animierte skills, monster usw usw.. alles GPL zusätzlich empfehle ich dir mal das Canvas Framework KineticJS anzuschauen es bietet dir viele nette features an. in einem Thread hier habe ich ja eine scrollende karte gepostet , kannst dir ja den Quellcode anschauen;)

 

MFG

MonPMCESTECEST1AugE
 

Die Daten aufm Server sind egal, ich hab 6 TB auf meinem Root ;) mir gehts darum das möglichst wenig zum User übertragen wird und er nicht so lange ladezeiten hat, deswegen wollte ich alles während einer kurzen werbeeinblendung laden.

Ja meine Karte besteht auch aus mehreren Layern: Hintergrund, noch ein Hintergrund für z.b Nebel in schluchten etc, dann der Boden, dann die Objekte + Figur und Dann noch vordergrund, z.b in Höhlen wenn noch n paar Felsen hervorragen, ...

Die Karte läuft schon sehr flüssig, bekomme immer so 50-60 fps bei normal bestückten räumen. auch bei schlechteren pcs sinds meist noch über 30.

Auch wenn ich mehrere Karten vorlade is die Performance noch so gut. (Hab noch bissl getestet) Also werde ich am Anfang alle Karten laden und dann läuft es noch gut und es muss nicht mehr viel nachgeladen werden, außer die abgleiche ;)

Grafiken hab ich schon von Flare :D Recht viel besser kriegt man solche Grafiken auch nur für richtig viel geld

Hab mir schon einige Frameworks angeschaut aber gerade bei Canvas-Spielen is die Performance sehr wichtig und die meisten sind einfach überladen, wenn man etwas in das Thema eingearbeitet is und auch schon mal was mit 3d engines gemacht hat bekommt man ein sehr Performantes ergebnis wenn man dass selber übernimmt, mein fw is ja schon zu 90% fertig und läuft schon sehr schnell. die meisten features die noch kommen betreffen performance optimierung oder machen eingaben einfacher, z.b new Sprite(80, 80, bildpfad, noch, ein , paar, infos); -> new Sprite(config);

hab mir deine karte schonmal angeschaut, erinnert mich immer bissl an meins wegen den bildern^^

mfg Yanko

MonPMCESTECEST1AugE
 

bezüglich des vorlandes, im grunde musste ja nur bilder + json daten vorladen, mehr nicht, die bilder können zusätzlich noch über .htaccess gecached werden.

du sagst, du verlierst an performance wenn du mehrere karten vorlädst. wie kommt denn sowas zu stande? die performance verluste kommen meist bei der darstellung. du kannst ja viele json dateien laden, wenn du aber nur das was gerade angezeigt werden soll , auch anzeigst, dann solltest du eigentlich keine performance verluste kriegen

MonPMCESTECEST1AugE
 

Wenn ich viele Objects ala new Map(jsonconfig); habe mal angenommen ich mache eine rießige welt die komplett in solchen objects gespeichert wird am anfang