Laufend Teilbilder aus Großbild laden

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Terep
Beiträge: 53
Registriert: 17.01.2008, 21:20
Wohnort: Hannover Region

Laufend Teilbilder aus Großbild laden

Beitrag von Terep »

Zurzeit versuche ich mich daran, ein Rollenspiel wie in Altzeiten Bards tale von Interplay zu proggen. Oben links habe ich eine Art Fenster, auf dem die Stadt gezeigt wird. Die Stadt besteht aus 20 x 20 Feldern. Man kann sich nach den vier Himmelsrichtungen innerhalb der Stadt bewegen. Anfangs wollte ich einzelne Grafiken pro Feld hochladen. Meine Gimperfahrungen haben mich ernüchtert. Jetzt habe ich folgendes vor:
Das Spielfeld habe ich als kleine Map mit 400 x 400 Pixel in Gimp gezeichnet. Wege, Häuser und entsprechende Mauern sind eindeutig dargestellt. Mit den Pfeiltasten kann man sich auf dieser kleinen Karte bewegen, solange man nicht versucht, durch eine Mauer zu gehen. Das klappt flüssig.
Die Stadt selbst ist 2560 x 2560 Pixel groß. Ein einzelnes Feld hat 128 x 128 Pixel. In das Grafikfenster oben links auf dem Bildschirm möchte ich gerne immer 9 Felder zeigen, das heißt, mit jeder Bewegung muss ein anderer Teil der Karte hochgeladen werden, so, dass das mittlere Feld immer die aktuelle Standort des Spielers ist.

Die Frage, die mich zurzeit beschäftigt. Wie kann ich aus einem Bild (gif, png, jpg) per Programm immer den richtigen Ausschnitt zeigen. Es interessiert mich nur der Zugriff auf das Teilbild. Alles andere kriege ich dann hin.
Nur weiß ich nicht, wie ich ein vorgegebenes Teilbild von dem Stadtbild hochlade. Bei 400 Feldern kann ich ja nicht 400 Bilder hinterlegen.

Für Tipps wäre ich dankbar.

PS: Den Tipp von Chromanoid: (http://www.permadi.com/java/rayc/Rayc.java) habe ich erst mal aufs Eis gelegt. Der ist für die Dungeons. Da bin ich noch zu weit von weg.

Terep

Nachtrag: Eigentlich einfach:
g2.drawImage(img, 50, 140, 434, 524, 1, 1, 384, 384, this); // geladenes Spielbild
Man kann beim Hochladen auch die Ausschnittsmaße mit angeben. Sonst wird skaliert.
Avatar = „Odyssee im Weltraum“ Film von Stanley Kubrick (Warner Brothers);
nach dem Buch von Arthur C. Clarke. It will becoming true ?!!
Antworten