Cursor Wechsel



  • Hallo zusammen!

    Ihr kennt doch sicherlich alle Strategie Spiele á la C&C. Hat man dort eine Einheit angewählt, erscheint der "Wegpunktcursor". Bewegt man die Maus nun über eine feindliche Einheit, wandelt sich der Cursor in einen "Angriffscursor".

    Um diesen wechsel zum "Angriffscurosr" zu vollziehen, müsste man doch zu jedem Zeitpunkt prüfen, ob man mit der Maus über einem (feindlichen) Objekt ist oder nicht. Ziemlich zeitraubend finde ich.

    Oder wie wird so etwas realisiert?

    Danke im Voraus! 🙂



  • Du würdest doch sowieso testen um was für ein Objekt es sich handelt.
    Ob du nun zusätzlich noch testest obs feindlich ist oder nicht macht den Braten auch nicht mehr fett.



  • Wieso würde ich es sowieso testen?

    Ich kann doch auch nur aus Zufall mit der Maus über feindliche Einheiten kommen...?!

    Die Maus wird ja ziemlich oft abgefragt in der Sekunde, soll ich dann etwa jedes mal gucken, ob der Cursor über einem Objekt ist und wenn es dann feindlich ist, den Cursor ändern?

    Oder fragt man dann nur alle paar mal ab?



  • Naja ehrlich gesagt weiss es auch nicht genau.
    Aber ich würde es so machen:

    1. Speichere jedes mal wenn du ein Objekt zeichnest, welche Pixel es momentan belegt. Je nachdem ob du auch gestappelte Objekte zuläßt musst du dich dann entscheiden, ob nur ein (das oberste) oder alle Objekte zu dem Pixel beitragen.

    2. Dann fragst du eben in jedem Frame ab über welchem Pixel sich die Maus gerade befindet und stellst dann mit Hilfe der oberen Pixelmatrix fest welche Objekte sich darin befinden.



  • Hm, schwer vorzustellen... meinst Du einen Zugriff auf den BackBuffer? Wie komme ich denn an die Pixel, die ein Objekt belegt? Da steckt doch sicherlich eine unmenge an Mathematik dahinter, oder?! 😕



  • Das kommt ganz drauf an...

    Was verwendest du denn für Technologien ? Solls 3d oder 2d werden ? DirectX, SDL oder OpenGL ?



  • DirectX in 3D



  • Ich würde an deiner Stelle mal nach "Picking" und "DirectX" googeln.

    Picking bezeichnet das gezielte Auswählen von bestimmten Objekten mit der Maus.
    Dazu musst du auch feststellen welche Objekte sich unter der Maus befinden.
    Ich denke du kannst dann die verwendeten Schritte auch zur Mauscursorgrafik-Bestimmung verwenden.

    Bin aber kein Profi...Vielleicht antwortet dir ja mal jemand anderes.





  • Vielen Dank erstmal für eure Mühe und Antworten 🙂

    Picking habe ich mittlerweile realisiert. Darum geht es nicht. Ich finde halt nur, dass die Berechnung des Strahls und das Nachschauen welches Objekt getroffen wurde ziemlich aufwendig ist.
    Naja, immerhin müssen bei dieser Abfrage nur "feindliche" Objekte abgefragt werden. Außerdem könnte man auch Unterteilungen des Spielfeldes vornehmen und so den Umfang reduzieren.

    ..ich habe einfach nur gedacht, es könnte eventuell noch eine Möglichkeit geben, die mir nicht bekannt ist.

    Trotzdem Danke nochmal! :xmas2:



  • iop schrieb:

    Außerdem könnte man auch Unterteilungen des Spielfeldes vornehmen und so den Umfang reduzieren.

    Das musst du früher oder später sehr wahrscheinlich machen müssen, damit dein Spiel mit akzeptablen Frameraten läuft :>
    Und wenn du das anständig machst, musst du pro Frame sowieso nur noch ca. ~5 Einheiten abfragen ^^



  • Hm, ja, hast recht.

    Momentan grüble ich die ganze Zeit darüber nach, wie man so eine Unterteilung halbwegs anständig machen könnte. Dazu kommt noch die Suche nach einer geeigneten Wegfindung... ich glaube, ich bin gerade an einem Punkt angekommen, an dem das Ganze langsam kompliziert wird...


Anmelden zum Antworten