|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Chris25 Mini JLI'ler
Anmeldedatum: 07.05.2003 Beiträge: 6
Medaillen: Keine
|
Verfasst am: 07.05.2003, 14:09 Titel: Maps colorkey? |
|
|
Hi,
weiss jemand einen ansatz...
1. wie ich eine riesengrosse weltkarte einbinden kann, die in alle richtungen scrollbar ist und sich wiederholt?
2. wie ich auf diese weltkarte ein minifenster einblende, um von dort aus an alle möglichen stellen auf der Riesenkarte "springen" zu könenn?
3. Ich hab eine Weltkarte aus einem atlas eingescannt und in dx eingebunden. Dort versuch ich nun seit 2 tagen einen effekt zu erzielen, dass sich der Ländername bei Überschreitung einer Grenze mit der Maus ändert. problem ist, grenzen aus dem Weltatlas sind nicht gerade symethrisch. Daher dachte ich irgendwie an colorkeying, die Farbe der Grenzen auslesen und die Länder als Art Frames zu behandeln, wie bei einer animation. Wäre das oder was anderes möglich und wenn ja wie?
Vielen dank
Chris
p.s.: super book! Gibts eigentlich einen zweiten teil dazu? |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 07.05.2003, 14:23 Titel: |
|
|
Du meinst das du wenn du mit der Maus einen Pixel mit einer bestimmten Farbe z. B. Rot berührst soll der Name des Landes angezeigt werden??
Du könntest ja die Mausposition checken mit
Code: | GetCursorPos(POINT* x, POINT* y) // Oder so ähnlich, schau in der MSDN nach |
und dann musst du die Farbe des Pixels herausfinden. Vielleicht mit einer andersherumlaufenden DermitePixelColor oder so ähnlich, wird im Buch im DDraw-Kapitel erklärt. |
|
Nach oben |
|
|
Chris25 Mini JLI'ler
Anmeldedatum: 07.05.2003 Beiträge: 6
Medaillen: Keine
|
Verfasst am: 07.05.2003, 14:38 Titel: |
|
|
Monkey hat Folgendes geschrieben: | Du meinst das du wenn du mit der Maus einen Pixel mit einer bestimmten Farbe z. B. Rot berührst soll der Name des Landes angezeigt werden??
|
nicht ganz. hoverst du mit Maus über Deutschland, wird Deutschland angezeigt, überschreitest du grenze zu Frankreich, Frankreich, zu Belgien Belgien etc.. Auf dem Meer sollte dann kein Landname mehr angezeigt werden.... für weitere hilfe wär ich dankbar, sehe jetzt erstmal in dem grafik forum nach, danke!
Gruss
Chris |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 07.05.2003, 15:44 Titel: |
|
|
Im zweiten Buch, das jetzt im Laden stehen sollte, gibt es pixelgenaue Kollisionserkennung, mit dem du das machen kannst.
Christian |
|
Nach oben |
|
|
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 07.05.2003, 16:24 Titel: |
|
|
Hi,
du könntest deine Weltkarte in einzelne Vierecke auteilen, die bspw. genau Gebiete wie Europa (GB einzeln würde sich auch anbieten) Amerika, Japan usw. eingrenzen. Wenn du nun weißt, dass sich dein Cursor in dem Viereck "Europa" befindet musst, du nämlich nur noch ein begrenztere Anzahl von Ländern abklappern, um herauszufinden in welchem er sich befindet. Und ansonsten hilft eigentlich nur eine pixelgenaue Abfrage, wie Christian es schon schrieb.
So mir ist gerade eine vielleicht noch bessere Möglichkeit eingefallen, du könntest für jedes Land ein Recheck nutzen und dieses umfasst die Extrema eines Landes (nördlichsten, südlichsten, westlichsten und östlichsten Punkt). Wenn nun deine Maus bewegt wird, überprüfst du erstmal Grob innerhalb welcher Rechtecke sich dein Cursor befindet. Nun musst du noch Pixelgenaue informationen über das Land haben, was ja nicht schwer sein sollte, ein TLand-Array hineinzukopieren, ob das Land an der Stelle vorhanden ist oder nicht, da du ja die Grenzfarbe hast und also von nördlichsten Punkt bis zum nächsten roten Pixel nach süden gehen kannst, etc. . Falls sich der Cursor nicht in dem Land dieses Vierecks befindet, soll er das nächste ermittelte Viereck prüfen. Falls doch fragst du noch den Landnamen ab und fertig ists. Das wirklich schwere daran ist eigentlich der Algorhitmus zur pixelgenauen Erkennung der einzelnen Länder. Die Datenstruktur für ein Land könnte folgendermaßen aussehen...
Code: | struct TLand{
char sName[25];
int top,left,right,bottom;
bool** ppLandInfo; /*true=diese Land;false=gehört nicht zu diesem Land*/
}; |
Um dies zu erreichen, muss allerdings die Weltkarte von dir erstmal in Ländervierecke aufgteilt werden, diese Informationen könntest du ja bspw. aus einer "country.ini" laden. Nun brauchst du also "nur" noch einen Algorhitmus, welcher dein Bild an der nörlichsten Stelle nach einem roten Pixel durchsucht und von diesem aus nach Süden bis zum nächsten roten Pixel. Dann nimmst du die Mitte dieser Strecke und ermittelst dann immer weiter von diesem Mittelpunkt die Landinformationen. Es könnte sich anbieten an Stelle der Struktur TLand eine Klasse CLand zu schreiben.
Noch ein Zusatz, vielleicht würde es sich lohnen das dynamische Bool-Array durch einen eigenen Typ zu ersetzen.
Code: | typedef enum{
LANDINFO_LAND,
LANDINFO_OTHER,
LANDINFO_UNKNOWN
}; |
Um überprüfen zu können, ob du diesen Pixel schonmal geprüft hattest oder nicht.
Gruss Tarek |
|
Nach oben |
|
|
Chris25 Mini JLI'ler
Anmeldedatum: 07.05.2003 Beiträge: 6
Medaillen: Keine
|
Verfasst am: 07.05.2003, 18:50 Titel: |
|
|
Besten Dank, das werd ich mal so probiern.
Wegen Buch werd ich dann mal morgen nach Essen düsen und kaufen
Noch eines, wohnt hier jemand im Raum Essen, Bottrop, Gladbeck,Dorsten und gibt "Nachhilfe" in c/c++ und Directx?
grüsse
Chris |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 07.05.2003, 20:04 Titel: |
|
|
Zum Scrolling:
Du teilst einfach die Weltkarte in Bidschirmgroße Teile auf un lädst sie einzeln in Surfaces. Dann nimmst du zwei Variablen; eine für die X- die andere für die Y-Position. Jetzt nimmst du für die Blit-koordinaten einfach statt nur 'X', 'X-ScrollX'. Bei der Mausabfrage musst du dann statt 'MouseX', 'MouseX+ScrollX' nehmen. Für die Blittfunktion musst du eben dann einen Algorothmus schreiben, damit Surfaces, die z.T. außerhalb des Bildschirms liegen, auch gezeichnet werden. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Chris25 Mini JLI'ler
Anmeldedatum: 07.05.2003 Beiträge: 6
Medaillen: Keine
|
Verfasst am: 10.05.2003, 18:43 Titel: |
|
|
hi, ich hab nochwas entdeckt was ich hier unbedingt mitteilen muss , und ich glaube das ist viel leichter als alles andere.
Über die WeltKarte eine Maske mit einer weiteren Karte anlegen und jedes Land auf der Maske mit einer bestimmte Pixelfarbe füllen. So dürfte man die Länder per colorkey ganz simpel auseinanderhalten können. |
|
Nach oben |
|
|
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 10.05.2003, 23:20 Titel: |
|
|
Hi,
der Gedanke ist gar nicht schlecht, aber auch dafür müsstest du einen Algorhitmus proggen, welche verschiedene Länder in verschiedene Farben umwandelt und dann könntest du von Hand ne Datei erstellen in welche gespeichert ist, welches Land zu welcher Farbe gehört.
Du könntest natürlich auch, die Maske von Hand erstellen, aber ob das die ganze Sache wirklich vereinfacht?
Wirst du schon noch herausfinden, was besser geht bzw. du wirst zumindest mit dem Weg den du wählst Erfahrungen sammeln...
Gruss Tarek |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 12.05.2003, 15:45 Titel: |
|
|
könnte man dazu nicht den alpha kanal verwenden um platz zu sparen? |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|