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 KlasseIn 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 und die Position des Mausklicks , 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 KugelK = Spieler
. Bei jedem Update K += \overrightarrow{SM} * f, wobei von mir aus0.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.
-
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.
-
Du hast die Qual der Wahl:
PointF
,Point
,Size
oderSizeF
.Und alle 4 sind nicht wirklich praktisch.
Size
undSizeF
haben immerhin Addition und Subraktion mit sich selbst implementiert.Point
undPointF
kann man jeweils nur um einSize
, bzw.SizeF
, addieren oder subtrahieren. Dafür kann manPoint
undPointF
direkt mit derMatrix
Klasse verwenden.Die Überlegung liegt daher nahe, dass man hier eine eigene Vektor Struktur erstellt, welche implizit in
PointF
, bzw.Point
, oderSizeF
, 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
-
-
D.J. schrieb:
Und was ist mit
http://msdn.microsoft.com/de-de/library/system.windows.vector.aspxIst 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 dieMatrix
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...
-
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