Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.05.2009, 11:44

Rundenbasiertes Strategiespiel -> Feld Auswahl

Hallo, ich bin gerade dabei in kleines rundenbasiertes Strategiespiel zu programmieren. Ich habe also eine kleine Test-Karte, eine Ebene wenn man so will. Die Karte ist in quadratische Felder eingeteilt. Ich hab die komplette Karte schon gerastert, also ich habe die Koordinaten für jedes Feld. Nun ist mein Problem wie ich es hinkriegen, dass man ein Feld per klick auswählen kann. Mein Ansatz war, dass ich ja den Klick in der 2D Ebene des Bildschirms auf die 3D Ebene der Karte übertragen muss. Im Programm kann man sich in x und z Richtung bewegen und zoomen, wobei der Zoom parabel förmig ist. Über den tangens habe ich nun den Winkel berechnet mit der die Kamera auf die Karte guckt. Dann wollte ich abhängig von der Position des Klicks berechnen welchem Feld das entspricht. Vielleicht schwer zu verstehen, hier mal der code:

C-/C++-Quelltext

1
2
3
4
5
    temp = vCameraPos.y/(abs(vCameraPos.z-vCameraLookAt.z));
    winkel = RAD2DEG(atan(temp)); //Der Winkel in dem die Kamera auf die Karte guckt

    
    schnittpkt.z = vCameraPos.z+  ( (600-pt_trans.y) / tan(winkel) )  ;
    schnittpkt.x = pt_trans.x-400; //Schnittpunkte mit der Karte, die Höhe, also y ist immer 0. pt_trans ist eine POINT Struktur und beeinhaltet den Klick auf dem Bildschirm abhängig vom Fenster meiner Anwendung.


Das liefert mir allerdings nicht das was es soll. Die Zahlen 600 und 400 kommen übrigens daher, dass ich das ganze im Fenstermodus mit einer Auflösung von 800*600 teste. Ist der Ansatz falsch? Geht es leichter?

Wäre nett wenn mit jemand vielleicht noch mal nen Denkanstoß geben könnte.

2

07.05.2009, 13:03

Denkanstoß #1: Picking - Ray - D3DXIntersect... ;)

http://msdn.microsoft.com/en-us/library/bb172882(VS.85).aspx
fka tm

3

07.05.2009, 15:37

Denkanstoß #2: 2D zu 3D Koordinaten umformen
Tutorial
Das Tutorial ist zwar Visual Basic, aber die Funktionen heißen ähnlich. Umschreiben sollte kein Problem sein. Mir hats geholfen ;)

4

07.05.2009, 19:30

Und noch eine Frage: Gehört das hier nicht zum Topic "2D-/3D-Grafik und Spieleprogrammierung", auch wenn es mit der TriBase-Engine entwickelt wird (wo ich mir nicht so sicher bin -> Kann es aus dem Code nicht so eindeutig herauslesen ;) )

Werbeanzeige