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

03.12.2009, 09:23

Objekt per maus steuern

Hallo Leute,

ich möchte folgendes machen. Ich habe schon ein kleines Programm das im moment noch ein leeres schwarzes nichts darstellt :) super ^^, im ersten schritt nicht wirklich aufregend, aber ok so nun zu meiner frage. Ich möchte das ganze erweitern und zwar jeder kennt Anno, Age of empires und so weiter da hat man eine Maus und mit der kann man einheiten wählen und auf eine Postion auf der Map klicken dann bewegen sich die da hin. sowas will ich mal machen. Ich möchte im ersten schritt mal eine gerade fläche machen (farbe egal) danach ein Kleines model (kann auch ein würfel sein, das ist ziemlich egal) auf der Map sagen wir in der mitte Positionieren. Wenn das alles geladen ist möchte ich es schaffen mit meiner maus diese Figur auswählen zu können und mit einem Klick auf eine andere Position soll sich dann das Objekt dahin bewegen. Das ist was ich mal schaffen will. Im Späteren verlauf tausche ich dann den Würfel mit einer figur aus die dann dorthin geht, wenn ich doppelt klicke läuft und so weiter Smile dürfte ja nicht sooooo schwer sein oder ? :) meine frage dazu wie gehe ich da am besten ran ??

danke schon mal für die Hilfe

2

03.12.2009, 09:37

Du zerlegst das Problem in Teilprobleme:

1. erkennen ob die Figur angeklickt wurde (d.h. auf Klicks reagieren und die Mausposition auslesen, und dann evtl. einen Strahlentest mit der Szene machen)
2. merken, welches Objekt angeklickt wurde, für weitere Befehle
3. Wenn auf die Karte geklickt wird, prüfen ob ein Objekt gerade selektiert ist, wenn ja, dem Objekt den Laufbefehl geben.
4. Wenn ein Objekt einen Laufbefehl hat, bewegt es sich zu dieser Position hin, bis es sie erreicht, oder einen anderen Befehl bekommt.

Wenn es ein 3D Spiel ist, könnte der Test Maus/Spielfigur richtig interessant werden, einfacher hat man es da mit einer 2D Szene, wo man recht leicht errechnen kann, was die Maus geklickt hat.
Lieber dumm fragen, als dumm bleiben!

3

03.12.2009, 09:43

Danke für inputs :).

Hmm ich bin noch am Überlegen wie ich den die Mausklickts abfange das mus sich dann wohl in der Messageloop vorher abfangen, die Parameter setzten und dann Move und Render funktion durchlaufen lassen oder ? hat jemand ein Paar code schnipsl wie so eine MausFunktion in etwa auschauen kann ?

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

4

03.12.2009, 11:15

Zitat von »"Jonathan_Klein"«

Wenn es ein 3D Spiel ist, könnte der Test Maus/Spielfigur richtig interessant werden, einfacher hat man es da mit einer 2D Szene, wo man recht leicht errechnen kann, was die Maus geklickt hat.


Alle Spielfiguren einfach nochmals falschfarben rendern, jede Figur in einer anderen, Dithering, Fog, Licht, etc. pp ausschalten.
Anschließend die Pixelfarbe aus dem Framebuffer an der geklickten Position auslesen, glReadPixels im Falle von OpenGL.
Anhand derer kann die Figur dann eindeutig identifiziert werden.
Ist IMHO die einfachste Methode.
Achja, natürlich darauf verzichten, den Framebuffer zu swappen.
<< an dieser Stelle ist eine Signatur verstorben >>

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

5

03.12.2009, 14:23

Zitat von »"the[V«

oid"]

Zitat von »"Jonathan_Klein"«

Wenn es ein 3D Spiel ist, könnte der Test Maus/Spielfigur richtig interessant werden, einfacher hat man es da mit einer 2D Szene, wo man recht leicht errechnen kann, was die Maus geklickt hat.


Alle Spielfiguren einfach nochmals falschfarben rendern, jede Figur in einer anderen, Dithering, Fog, Licht, etc. pp ausschalten.
Anschließend die Pixelfarbe aus dem Framebuffer an der geklickten Position auslesen, glReadPixels im Falle von OpenGL.
Anhand derer kann die Figur dann eindeutig identifiziert werden.
Ist IMHO die einfachste Methode.
Achja, natürlich darauf verzichten, den Framebuffer zu swappen.

Unter dem Stichwort "Object Picking" findet man bei Google auch einige andere Ansätze die ohne einen zusätzlichen Rendervorgang auskommen.

6

03.12.2009, 15:42

Danke leute werde es mal versuchen und euch dann mein ergebnis hier posten :)

7

03.12.2009, 16:33

Zitat von »"the[V«

oid"]

Zitat von »"Jonathan_Klein"«

Wenn es ein 3D Spiel ist, könnte der Test Maus/Spielfigur richtig interessant werden, einfacher hat man es da mit einer 2D Szene, wo man recht leicht errechnen kann, was die Maus geklickt hat.


Alle Spielfiguren einfach nochmals falschfarben rendern, jede Figur in einer anderen, Dithering, Fog, Licht, etc. pp ausschalten.
Anschließend die Pixelfarbe aus dem Framebuffer an der geklickten Position auslesen, glReadPixels im Falle von OpenGL.
Anhand derer kann die Figur dann eindeutig identifiziert werden.
Ist IMHO die einfachste Methode.
Achja, natürlich darauf verzichten, den Framebuffer zu swappen.

Der Vorteil ist, dass dieser Ansatz äußerst leicht zu verstehen ist, der Nachteil, das man den Code an sehr viele Stellen ändern muss und der Test insgesamt sehr ineffizient ist.
Den Strahl aus der Mausposition und der aktuellen Kameramatrix+Viewport zu berechnen, das sind 5 Zeilen, und einen Strahl/Objekt Test braucht man sowieso immer.
Lieber dumm fragen, als dumm bleiben!

8

04.12.2009, 11:48

Spielfiguren anschalten.
Maus einschalten.
Achten auch Festplattenaktivität wegen Fragmentierung !!1

Werbeanzeige