Home | Forum | XNA.mag - Fragen | XNA - 2D-Programmierung | Schuss Richtung Maus ungenau. 2D
Schuss Richtung Maus ungenau. 2D
| |
|
|
| |
Ramrod Neuling
Anmeldedatum: 10.05.2012 Beiträge: 3
|
Verfasst am: 10.05.2012, 14:47 Titel: Schuss Richtung Maus ungenau. 2D |
|
Hi,
ich möchte in einem 2D Spiel Schüsse vom Spieler zur Maus fliegen lassen.
Dazu hol ichmir folgende Daten:
| Code: |
Vector2 mouse_posi, view_direction; //view_direction ist ein Vektor mit der "Blickrichtung" Also vom Spieler zur Maus
MouseState ms = Mouse.GetState();
mouse_posi.X = ms.X;
mouse_posi.Y = ms.Y;
view_direction.X = mouse_posi.X - sprite_red.Postion.X + 16; //sprite_red ist der Spieler, +16 damit der Ursprung in der Mitte des Spieler_Sprites liegt und nicht an der oberen linken Ecke.
view_direction.Y = mouse_posi.Y - sprite_red.Postion.Y+16;
view_direction.Normalize(); //Blickrichtung normalisieren um den "Schuss" in die Richtung zu bewegen
double angle = (double)Math.Atan2(view_direction.Y, view_direction.X); // der Winkel zwischen Spieler und Maus
angle += MathHelper.PiOver2; //Rotation addieren um auf Höhe der Maus zu sein
double winkel = MathHelper.ToDegrees((float)(angle)); //Winkel in Grad umrechnen
|
Nun ist es so, das der Schuss manchmal genau die Spitze des Mauszeigers trifft und manchmal etwas daneben.
Wenn ich mir den Winkel in Grad ausgeben lasse, dann hab ich gerade unter dem Spieler 180°, aber alle anderen Werte sind etwa 10-15° verschoben.
Also gerade rechts vom Spieler ist etwa 79° etc.
Ich bin da jetzt etwas ratlos. |
|
| Nach oben |
|

|
JeReT Member
Anmeldedatum: 19.07.2007 Beiträge: 3248 Wohnort: µnchen
|
Verfasst am: 10.05.2012, 15:34 Titel: |
|
Die berechnung des winkels sieht erst mal richtig aus.
das "+16" ist seeehr unschön. Nimm da lieber eine Variable "Origin", die im Sprite gespeichert ist und auch beim zeichnen als origin verwendet wird.
dann frage ich mich, wozu du denn winkel brauchst. reicht es nicht einen Richtungsvektor (view-direction) zu speichern, den du dann für die bewegung verwendest? oder brauchst du den winkel noch, um dein Sprite zu rotieren?
und wozu rechnest du dann nochmal in Grad um?
Und: hat dein Schuss-Sprite auch seinen origin in der mitte? _________________
Shapes |
|
| Nach oben |
|

|
Ramrod Neuling
Anmeldedatum: 10.05.2012 Beiträge: 3
|
Verfasst am: 10.05.2012, 15:49 Titel: |
|
Also erstmal danke für die Antwort.
Hab inzwischen das +16 in Origin umgesetzt.
Den Winkel brauch ich für die Rotation des Sprites, richtig.
Origin des Sprites passt auch.
Als Grundlage muss ja erstmal der richtige Winkel ausgegeben werden, wenn ich die Maus links,rechts,oben und unten vom Spieler halte. Wenn das erstmal stimmt, klappt der Rest auch.
EDIT:
Hab grad mal aus Verzweiflung die MAuskoordinaten ausgeben lassen. Wenn ich ganz links oben an der Ecke bin, dann hat die MAus die Koordinaten 20/1621.
Wie kann denn sowas passieren?
EDIT2:
Problem gelöst:
Da mein Spielfeld in einer picturebox liegt, kann ich die MAuskordinaten nicht über den MouseState lesen.
Lösung:
| Code: | public void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
game.mouseX = e.X; //Hier mit public Variablen in der game-Klasse. Kann man schöner machen
game.mouseY = e.Y;
}
|
In der game-Klasse
| Code: | private Vector2 mouseOrigin()
{
Vector2 v = new Vector2(mouseX, mouseY); //Wieder die schnelle Version. Aber funktioniert.
return v;
} |
Jetzt stimmen die Winkelangaben und ich kann die Schüsse direkt platzieren und sie kommen an der Mausspitze an.
Danke für die Hilfe. |
|
| Nach oben |
|

|
PCFreak Member
Anmeldedatum: 18.04.2012 Beiträge: 26
|
Verfasst am: 10.05.2012, 16:52 Titel: |
|
Wenn ich das richtig verstanden hab, dann hast du ja XNA in eine Windows Form integriert.
Versuch doch mal:
| Code: | | Mouse.WindowHandle = HandleDeinerPictureBox; |
Hab ich auch bei einigen projekten so gemacht  |
|
| Nach oben |
|

|
|
|
|
 |
 |
 |
 |
|
Alle Zeiten sind GMT + 1 Stunde
|
| Seite 1 von 1 |
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de