JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=4bd6964159be7b41b140f45cb2c2c26bMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Maps colorkey?

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Chris25
Mini JLI'ler



Anmeldedatum: 07.05.2003
Beiträge: 6

Medaillen: Keine

BeitragVerfasst am: 07.05.2003, 15:09    Titel: Maps colorkey? Antworten mit Zitat

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 Smile
Chris

p.s.: super book! Gibts eigentlich einen zweiten teil dazu?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 07.05.2003, 15:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Chris25
Mini JLI'ler



Anmeldedatum: 07.05.2003
Beiträge: 6

Medaillen: Keine

BeitragVerfasst am: 07.05.2003, 15:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 47
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 07.05.2003, 16:44    Titel: Antworten mit Zitat

Im zweiten Buch, das jetzt im Laden stehen sollte, gibt es pixelgenaue Kollisionserkennung, mit dem du das machen kannst.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Starwash
Senior JLI'ler


Alter: 39
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 07.05.2003, 17:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Chris25
Mini JLI'ler



Anmeldedatum: 07.05.2003
Beiträge: 6

Medaillen: Keine

BeitragVerfasst am: 07.05.2003, 19:50    Titel: Antworten mit Zitat

Besten Dank, das werd ich mal so probiern.
Wegen Buch werd ich dann mal morgen nach Essen düsen und kaufen Very Happy

Noch eines, wohnt hier jemand im Raum Essen, Bottrop, Gladbeck,Dorsten und gibt "Nachhilfe" in c/c++ und Directx?

grüsse
Chris
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 07.05.2003, 21:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Chris25
Mini JLI'ler



Anmeldedatum: 07.05.2003
Beiträge: 6

Medaillen: Keine

BeitragVerfasst am: 10.05.2003, 19:43    Titel: Antworten mit Zitat

hi, ich hab nochwas entdeckt was ich hier unbedingt mitteilen muss Very Happy , 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
Benutzer-Profile anzeigen Private Nachricht senden
Starwash
Senior JLI'ler


Alter: 39
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 00:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 12.05.2003, 16:45    Titel: Antworten mit Zitat

könnte man dazu nicht den alpha kanal verwenden um platz zu sparen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum