Dynamische Map load

Zum Thema Array: Da müssen ein paar Infos rein. Zu allererst muss es ein zweidimensionaler Array sein, damit du Zeilen und Spalten hast. Jedes Feld braucht dann nochmals zwei Informationen: Was ist es für ein Feld (Stein, Wasser, Baum, leer, Haus, ... whatever!) und was für eine ID hat das Feld.
Ersteres kann man einfach mit einer Nummerierung von 0-x lösen, wobei 0 für leer, 1 für Wasser, 2 für Bäume, ... steht. Die entsprechenden Grafiken nennst du dann einfach 0.png, 1.png... so sparst du vor allem Traffic.
Die Feld-ID ist nur wichtig, wenn du auf das Feld per Klick später zugreifen willst.

Mit JS bastelst du dir jetzt einfach ein paar Funktionen, die die Felder füllen. Wenn es da hängt, dann kannst du ja nochmal fragen.

gruß lime


also ich habe jetzt mal so ein json array gebastelt, -> json. Man startet das Script mit dem Button. Leider zeigt es den Inhalt des Arrays nicht an, nur im Firebug kann man es sich über die Console schlecht leserlich anschauen.

Also es beinhaltet die x-y Koordinaten, id´s, Imgtypes ( gras, wald, stein) in Zahlen.

Leider kann ich mir gerade noch nicht richtig vorstellen, wie ich mit meine Positionsmitte die ImgTags drumherum bekommen soll bzw wie es jetzt weiter geht :) ...

Vielleicht ist es auch schon zu Spät dafür!

Hier nochmal der inhalt der ajax.php. Ich glaube nämlich, dass ich da auch noch irgendwo ein Fehler habe.
PHP:
<?php

function generate($width, $height)
{
    $fields = array();
    

    for($y=0; $y < $map_height; $y++)
    {

        for($x=0; $x < $map_width; $x++)
        {
           
            $type = array(
                    0=>array("id"=>'y'.$y.'-x'.$x.'',"type"=>'0'),
                    1=>array("id"=>'y'.$y.'-x'.$x.'',"type"=>'1'), //wasser
                    2=>array("id"=>'y'.$y.'-x'.$x.'',"type"=>'2'),  //berge
                    3=>array("id"=>'y'.$y.'-x'.$x.'',"type"=>'3')    //wald
            );
                
            if($rand==0)
            {
                $fields[$x][$y] = $type[rand(1, 3)];
            }
            else
            {
                $fields[$x][$y] = $type[0];
            }
                           
        };

    };
    return $fields;
};

    $foo = generate(125, 125);
    echo json_encode($foo);

 
?>
 
Du brauchst eigentlich kein JS Array.
Du brauchst lediglich eine Funktion, die dir - wenn du einen Mittelpunkt gegeben hast (z.b. 74-112), die Karte dementsprechend ausrichtet.
Das basiert weitestgehendst nur auf einer logischen Rechnung.

Wenn 74-112 der Mittelpunkt ist, dann bleiben links, rechts, drüber und drunter jeweils 4 Felder.
Das Feld links oben hat somit die Koordinaten 70-108. Den Rest kannst du entsprechend herausfinden, weil du ja jeweils nur die Koordinaten erhöhen musst.

Prinzip in paar kurzen Schritten:
  1. Aktuellen Mittelpunkt an die Funktion übergeben
  2. Wenn die Karte 9*9 fasst, dann (9-1)/2 rechnen, damit du weißt, wie viel du abziehen musst
  3. von den übergebenen Koordinaten diese Zahl abziehen
  4. die erhaltenen Koordinaten sind für das 1. Map-Feld, den Rest einfach durch erhöhen einsetzen

Irgendwie musst du jedenfalls dein in PHP generiertes JSON-Array an die JS-Funktion übergeben oder es zumindest ans Javascript übergeben, damit man drauf zugreifen kann.
Das JSON-Array ist eigentlich nur wichtig, damit du weißt welche Bilder du welchem Feld geben musst...

gruß
 
Zurück