Schüsse animieren - Vektor



  • Hey,
    ich wüsste gerne wie man es hinbekommt einen Schuss auf dem Panel in die Richtung der MousePosition fliegen zu lassen.

    Ich habe gelesen das funktioneirt mit Vektoren ganz gut, aber leider weiß ich gar nicht wie das funktioniert.

    Meine Kugel wir mit dem OnPaintEvent gezeichnet und immer mit einem Timer mit einer Update FUnktion bewegt.
    Aber momentan geht sie immer nur nach oben.

    Danke für die Hilfe



  • Der "Schuss" hat eine Startposition? Du bekommst die Position des Mousemoves heraus? Mit beidem hast du einen Vektor. Bei jedem Update bewegst du den "Schuss" um einen Bruchteil des Vektors bis die Endposition erreicht oder überschritten ist?



  • Danke erstmal.

    Aber muss ich diesen Vektro erstellen oder wie funktioniert das?



  • "erstellen", schon wieder ... 😡

    berechnen ➡ Verbindungsvektor.



  • Achso..
    Ja Vektoren kommen bei mir jetzt erst in der 11ten Klasse 😉

    In C++ waren Vektoren wie so ein Feld mit dem du verschiedene Methoden verwenden konntest.. Deswegen dachte ich das..



  • Das heißt der Vektor für meinen schuss ist :

    ---------->
           SpielerMaus(SpielerX - SpielerY, MousePosition.X - MousePosition.Y)
    


  • Keine Ahnung. Aber eher nicht.

    Ich geh' mal von Koordinaten in der Client-Area eines Fensters aus:

    1         1   1     2
     0   1       5   7     0         5   7     0 x
       + - - - - - - - - - - - - - - - - - - - - >
     1 |                                 
       |                                 
     3 |                               __M
       |                            _-- /
     5 |                        _--¯
       |                    _--¯
       |                _--¯
     8 |             S ¯
       |
    10 |
       |
       |
     y v
    

    Sei die Spielerposition S=(78)S = \left(\begin{array}{c}7\\8\end{array}\right) und die Position des Mausklicks M=(173)M = \left(\begin{array}{c}17\\3\end{array}\right), dann ist der Verbindungsvektor \overrightarrow{SM} = \left(\begin{array}{c}M.x - S.x\\M.y - S.y\end{array}\right) = \left(\begin{array}{c}17 - 7\\3 - 8\end{array}\right)=\left(\begin{array}{c}10\\-5\end{array}\right).



  • Ja genau. So steht das ja auch in dem Link den du mir gezeigt hast.

    Aber wie soll ich der Kugel Sagen das sie in Richtung des Vektors ( 10/-5 ) fliegen
    soll?



  • Naja, du zeichnest doch die Kugel OnPaint , oder? Anfangs Kugel K = Spieler . Bei jedem Update K += \overrightarrow{SM} * f, wobei ff von mir aus 0.1 - je nachdem wie schnell das sich das Ding bewegen soll. Bis irgendwann was getroffen ist ( K >= Enemy ) oder das Spielfeld verlässt.



  • du zeichnest doch die Kugel OnPaint, oder?

    Ja das mache ich.
    Und bei mir ist es so das KugelX = SpielerX und KugelY = SpielerY ist.

    Aber wie soll ich sagen wie sich die X und Y Position erhöht.
    Der Computer weiß ja nicht was "SM" ist.

    Ich kann ja der Kugel immer nur einen neuen X und Y Wert zuweisen
    und nicht sagen mit welchem Vektor sie sich bewegen sollen.


  • Administrator

    Indem du den Vektor SM berechnest, speicherst und in einem regelmässigen Intervall anwendest.

    Ich frage mich allerdings, ob es so klug ist, wenn du bei deinem Wissensstand ein solchens Spiel programmieren möchtest. Mich beschleicht mehr und mehr das Gefühl, dass dich dieses Projekt völlig überfordert.

    Grüssli



  • Dravere schrieb:

    Indem du den Vektor SM berechnest, speicherst und in einem regelmässigen Intervall anwendest.

    Gibt es einen Datentyp Vektor in dem ich ihn Speichern kann?

    Ich frage mich allerdings, ob es so klug ist, wenn du bei deinem Wissensstand ein solchens Spiel programmieren möchtest. Mich beschleicht mehr und mehr das Gefühl, dass dich dieses Projekt völlig überfordert.

    Nein. Es gibt ein paar Sachen die mir Probleme bereitet haben, aber ansonsten komme ich gut voran.


  • Administrator

    Du hast die Qual der Wahl:
    PointF , Point , Size oder SizeF .

    Und alle 4 sind nicht wirklich praktisch. Size und SizeF haben immerhin Addition und Subraktion mit sich selbst implementiert. Point und PointF kann man jeweils nur um ein Size , bzw. SizeF , addieren oder subtrahieren. Dafür kann man Point und PointF direkt mit der Matrix Klasse verwenden.

    Die Überlegung liegt daher nahe, dass man hier eine eigene Vektor Struktur erstellt, welche implizit in PointF , bzw. Point , oder SizeF , bzw. Size , konvertiert werden kann.

    Ich würde es zudem mit den Gleitkommazahlen-Versionen (-F) versuchen. Kommastellen sind in Spielen des Öfteren praktisch 🙂

    Grüssli




  • Administrator

    D.J. schrieb:

    Und was ist mit
    http://msdn.microsoft.com/de-de/library/system.windows.vector.aspx

    Ist für WPF gedacht. Aber gut, die WindowsBase.dll sollte auf jedem Computer mit .Net 3.0 oder höher sowieso vorhanden sein und daher macht es nichts aus, wenn du die noch dazulinkst. Falls du Matrizen verwendest, solltest du dann aber die Matrix Klasse aus WPF nehmen. Sonst musst du für alle Operationen immer hin und her konvertieren.

    Falls du auch .Net vor 3.0 unterstützen möchtest, geht das allerdings nicht.

    Grüssli



  • Hm ich bekomms einfach nicht hin...


  • Administrator

    D.J. schrieb:

    Hm ich bekomms einfach nicht hin...

    Das ist blöd. Vielleicht solltest du dich doch zuerst mit einfacherem beschäftigen? 😉

    Oder lies dich zumindest mal in die Vektorgeometrie ein. Die Wikipedia mit fortführenden Links ist ein möglicher Einstiegspunkt, welcher aber womöglich auch etwas steinig ist. Vielleicht wäre daher ein Buch zur Spieleprogrammierung nicht schlecht. Ich kann dir allerdings keine Empfehlungen für die Spieleprogrammierung im Bereich von C# geben, da ich nur welche für C++ kenne.

    Diese C# Bücher werden dann aber höchstwahrscheinlich auch XNA einsetzen und nicht WinForms 😉

    Du könntest drüben im Forum zur Spieleprogrammierung mal nach entsprechenden Bücher für die Spieleprogrammierung unter C# fragen. Mach dich allerdings auf kritische Rückfragen gefasst.

    Grüssli



  • Vielleicht wäre daher ein Buch zur Spieleprogrammierung nicht schlecht. Ich kann dir allerdings keine Empfehlungen für die Spieleprogrammierung im Bereich von C# geben, da ich nur welche für C++ kenne.

    Ich denke ich schau mal was sich für XNA finden lässt.
    Das soll ja eigentlich die Hauptsprache für Spiele aller Art sein.

    Wenns dich vielleicht interessiert.
    Das ist das Spiel das ich versucht habe nachzumachen 😉

    http://www.youtube.com/watch?v=R8VjUpQjVBc&feature=relmfu


Anmelden zum Antworten