Sven Rautenberg: image maps farbig machen?

Beitrag lesen

Moin!

Es handelt sich hierbei um eine Landkarte mit verschiedenen Ländern. Ich möchte nun das wenn User X das Land 1 gehört es farbig wird, unzwar soll es genau die Farbe annehmen,die der User ausgewählt hat. Ich hatte gehoft es mit Image-Maps realisieren zu können. Einmal jedes Land einscannen und dann über PHP die Farbe ändern. Aber vielleicht kennt ihr ja auch noch eine andere Methode eine nicht 4eckige Fläche farblich zu ändern.

Mit der gdlib wärst du da schon am besten dran.

Du hast 500 Länder. Und du hast mutmaßlich vielleicht 4 Mitspieler. Jedes der 500 Länder kann in jeder der 4 Mitspielerfarben erscheinen (und vielleicht gibts noch eine fünfte für "Land noch frei"), das sind mindestens 500^4 = 62,5 Milliarden mögliche Kombinationen. Wenn deine Landkarte also aus statischen, in einer Imagemap verwendbaren einzelnen Grafik zu sehen sein soll, dann hast du an dieser Stelle ein Problem, wenn du die Landkarte STATISCH vordefinieren willst.

Und auch die Idee, die 500 Länder einfach einzeln in Grafiken zu packen und dann per Layer zu positionieren ist keine besonders gute Idee, denn dann brauchst du immer noch für jedes der 500 Länder für alle wählbaren Spielerfarben eine eigene Version (sind bei 4 Mitspielern mindestens 4 Versionen, sofern es nur 4 Farben gibt, wahrscheinlich sind es aber wohl eher 256 verschiedene Farben, oder gar die kompletten 16,4 Millionen von TrueColor).

Außerdem finden es die Browser nicht unbedingt so witzig, Unmengen an positionierten DIVs anzeigen zu müssen.

Deshalb kommst du nicht drum herum, deine Karte mit der gdlib (oder irgendeinem anderen Grafiktool) dynamisch generieren zu lassen. Und das ist gar nicht so viel Aufwand.

Du scannst deine Weltkarte komplett ein, z.B. schwarze Länderumrisse auf weißem Grund. Die Länderumrisse müssen "dicht" sein, so dass man mit dem Füllwerkzeug da einzeln Farbe reingießen kann. Für jedes der 500 Länder notierst du dir dann die Pixelkoordinate, ab der das Farbfüllen beginnen darf.

Die PNG-Grafik solltest du mit der gdlib dann in das gd2-Grafikformat konvertieren, dann ist sie schneller in den Speicher geladen. Es ist ja vollkommen egal, ob die Grafik auf dem Server wenig oder viel Platz verbraucht.

Die gdlib kann auch Farbe in umgrenzte Flächen einfüllen. Die Funktion dafür heißt imagefill(), und sie braucht zum Arbeiten die X/Y-Koordinate des Füllstartpunktes sowie die Farbe.

Du lädst also die gd2-Grafik (oder meinetwegen auch dein PNG) mit der Strichzeichnung. Und mit imagefill() füllst du alle die Koordinaten, bei denen Spieler ein Land besitzen. Dann gibst du die Karte an den Browser aus - fertig ist deine dynamische Landkarte.

Die grafische Gestaltung des Drumherum um die Kontinente ist dabei im Prinzip frei wählbar, wichtig ist, dass jedes Land aus einer einzigen, durchgehenden Farbe besteht.

Ja, das ist ein bestimmter Aufwand. Der meiste Aufwand geht in die Erstellung der grafischen Vorlage der Landkarte. Aber das dürfte wirklich der einfachste und schnellste Weg sein, zu dem von dir gewünschten Ergebnis zu kommen.

  • Sven Rautenberg