mmofacts.com

Teil einer Tabelle anzeigen

gepostet vor 18 Jahre, 9 Monate von Macavity
Hiho,

so ich war mir sicher es gab irgendwo schon einen post dazu habe ihn aber nicht gefunden T__T
und zwar habe ich eine Tabelle von 20 mal 20 Feldern.
und ich möchte nur einen Teil dieser Tabelle ausgeben (Position des Spielers + Sichtradius) also zum Beispiel maximal 8 Felder Sichtradius.
nicht im Sinne von der Rest der Karte ist schwarz sondern der Rest der Karte soll nicht sichtbar sein damit der Spieler nicht runterscrollen muss um seine Position zu sehen.

An sich wäre das noch nicht weiter tragisch aber der Spieler kann sich ja auch bewegen und da kommt der knifflige Teil dazu, da die Seite nicht jedes Mal neugeladen werden soll bei jedem Schritt aber sich logischerweise der sichtbare Teil verändert.

hat jemand eine Idee wie man das geschickt lösen kann?
gepostet vor 18 Jahre, 9 Monate von Klaus
3 Möglichkeiten.

Der klassische Teil mit der Ausgabe eines X * Y großen Rechtecks aus der Datenbank und Neuladen beim scrollen. Einfach umzusetzen und mittelmäßig perfomant.

Die Lösung per Ajax, die beim scrollen nur die wirklich benötigten Kartenfelder aus der Datenbank holt. Schwieriger umzusetzen und weniger Rechenarbeit für PHP+MySQL, dafür mehr Anfragen an den Server.

Ich glaube du stellst dir vor das die ganze Karte an den Browser geschickt wird und mit Javascript dann ein Teil angezeigt wird und rumgescrollt werden kann. Da kommt viel Arbeit auf MySQL zu. Außerdem verändert sich auf so einer Karte schnell etwas, was der Nutzer aber nicht mitbekommt weil seine Karte schon X Minuten alt ist.
gepostet vor 18 Jahre, 9 Monate von Macavity
Der klassische Teil mit der Ausgabe eines X * Y großen Rechtecks aus der Datenbank und Neuladen beim scrollen. Einfach umzusetzen und mittelmäßig perfomant.

klar das ist kein großes Problem aber störend wenn die leute durch zig Felder laufen und dabei jedesmal die ganze Seite neulädt... Ergonomisch vollkommen im Eimer...

Die Lösung per Ajax, die beim scrollen nur die wirklich benötigten Kartenfelder aus der Datenbank holt. Schwieriger umzusetzen und weniger Rechenarbeit für PHP+MySQL, dafür mehr Anfragen an den Server.

nur das die Karte nicht in der Datenbank steht... bis jetzt zumindest nicht.

Außerdem verändert sich auf so einer Karte schnell etwas, was der Nutzer aber nicht mitbekommt weil seine Karte schon X Minuten alt ist.

wer sich nicht bewegt hat nichts zu wollen... ausserdem verändern sich die Karten nur optisch wenn noch andere Charas auf der gleichen Karte sind.

Ich glaube du stellst dir vor das die ganze Karte an den Browser geschickt wird und mit Javascript dann ein Teil angezeigt wird und rumgescrollt werden kann. Da kommt viel Arbeit auf MySQL zu.

wieso auf MySQL?
gepostet vor 18 Jahre, 9 Monate von schokofreak
Zumindest unter Mozilla / Opera kann man mit TR's resp. TDs mit Hidden attributen arbeiten.
Schon mal praktisch.

Allerdings viel praktischer ist, wenn man in nem mehrdimensionalen JavaScript Array sämtliche daten hält.
-> Dieses dann bei Bewegungen aktualisiert; das geht ja indem man nur die Änderungen sendet

Aus diesem mehrdimensionalen Array HTML Code generiert -> sollte kein Problem sein
Und diesen HTML Code komplett neu lädt.

Das Parsen des HTML's dauert ein paar Millisekunden und wird nicht als störend empfunden.

Im prinzip ists fast das gleiche wie wenn komplette seite neu geladen wird, nur 1Mio mal performanter.

Gruss
gepostet vor 18 Jahre, 9 Monate von Klaus
>wieso auf MySQL?

Hab' ich MySQL gesagt? Ich meinte natürlich Datenbanken, Speichermöglichkeiten etc. allgemein.


Optimal wäre eine Lösung die beim Einloggen die ganze Karte im Cache speichert und der Server dann bei jeder Änderung allen eingeloggten Spielern die Änderungen schickt. Schade das dies im Browser unmöglich ist.
gepostet vor 18 Jahre, 9 Monate von Macavity
du meinst...nur damit ich richtig verstehe...

ein array in dem die informtionen über jede zelle drinstehen und dann bei der bewegung die karte neu zusammengestellt wird mit den informationen aus dem array.

die idee hatte ich auch schon...hört sich aber schnarchig zum programmieren an XD müsste aber gehen. nur wie macht man in JS mehrdimensionale Arrays einfach so?
var blub = new Array(Array(0,1),Array(5,5),...);
gepostet vor 18 Jahre, 9 Monate von schokofreak
geht, ist ned schöner code, aber geht
Ich hab mir für solche Einsatzgebiete ne spezielle java methode gemacht, der kann man HTML code geben und dieser wird im DOM baum dargestellt / resp. überschreibt bestehendes HTML.

Somit kannst einfach 1 DIV komplett ersetzen. Bau dir am besten auch sowas.
mehrdimensionale Arrays sind kein grosses problem - frag mich jetzt einfach nicht wie machen, hab das schon ewigkeiten nimmer gebraucht
gepostet vor 18 Jahre, 9 Monate von Macavity
Optimal wäre eine Lösung die beim Einloggen die ganze Karte im Cache speichert und der Server dann bei jeder Änderung allen eingeloggten Spielern die Änderungen schickt. Schade das dies im Browser unmöglich ist.

das macht wenig sinn da es sehr viele solche Karten gibt...und die müssen ja nu nicht alle im Cache gespeichert werden... könnte etwas hart werden denk ich mal..

Bau dir am besten auch sowas.

darauf wirds hinauslaufen...

eine idee ist das ganze einfach in java umzusetzen... aber darauf habe ich im moment echt keinen bock...mein java-wissen beschränkt sich eher auf nicht-grafische anwendung... -.-
gepostet vor 18 Jahre, 9 Monate von schokofreak
javascript, sorrry....
gepostet vor 18 Jahre, 9 Monate von Macavity
ja schon klar XD

aber meine idee war trotzdem das ich es früher oder später (wenn ich lust habe mich damit auseinanderzusetzen) wohl in java umgesetzt wird..

ajax ist zwar praktisch aber wie oben gesagt wurde gibt es da so das problem wenn der spieler sich nicht bewegt, aber andere sehr wohl... tja der spieler der grade nichts macht merkt davon nichts.
gepostet vor 18 Jahre, 9 Monate von schokofreak
es sei denn du fragst alle 1 sec (bei keiner aktion) den server nach änderungen ab.
Das verursacht sowohl client, netz als auch serverlast.

Gruss
gepostet vor 18 Jahre, 9 Monate von KoMtuR
Original von Macavity
nur wie macht man in JS mehrdimensionale Arrays einfach so?
var blub = new Array(Array(0,1),Array(5,5),...);


ich würde es so machen:
 

var map = new Array(); //Array ohne Grenzen
map[0] = new Array(); //bei bedarf noch ne dimension hinzufügen
map[0][0] = 'irgendwas';


man könnte halt dann beim füllen des Mehrdimensionalen arrays schauen, ob man auf die 2. Dimension zugreifen kann. Wenn nicht, dann einfach diese Dimension erstellen.

Auf diese Diskussion antworten