C# XNA-Maus Position
Ich habe einige Probleme mit meiner Maus-Koordinaten im XNA - 0 x 0 beliebig nahe (aber nicht in) der linken oberen Ecke meines Bildschirms.
Mir läuft das Spiel in einem Fenstermodus, gerade jetzt, aber die Koordinaten basieren, die aus dem Bildschirm, nicht das Spiel-Fenster (obwohl die XNA-Dokumentation erzählt mir sollte es auch anders sein)
Vielen Dank im Voraus!
Hier der code:
namespace TheGame
{
class Mousey
{
static public Vector2 pos;
static private Texture2D tex;
static public MouseState mouseState;
static public MouseState previousState;
//static public Mousey()
//{
//}
static public void Update()
{
previousState = mouseState;
mouseState = Mouse.GetState(); //Needed to find the most current mouse states.
pos.X = mouseState.X; //Change x pos to mouseX
pos.Y = mouseState.Y; //Change y pos to mouseY
}
//Drawing function to be called in the main Draw function.
static public void LoadContent(ContentManager thecontent)
{
tex = thecontent.Load<Texture2D>("mousey");
}
static public void Draw(SpriteBatch batch) //SpriteBatch to use.
{
batch.Draw(tex, pos, Color.White); //Draw it using the batch.
}
static public bool LBP()
{
if (mouseState.LeftButton == ButtonState.Pressed && previousState.LeftButton == ButtonState.Released)
{
return true;
}
else
{
return false;
}
}
}
}
Dein code funktioniert bei mir einwandfrei. Copypasted es in einem neuen Projekt. Die 0 x 0 ist oben Links, es sei denn, Sie reden über eine 1-pixel-Genauigkeit Sache. Vielleicht ist es das spriteBatch... Einzige, was ich geändert habe.
InformationsquelleAutor Fool Whip | 2011-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Spiel.cs:
InformationsquelleAutor Jaycin Van Vuuren
Dies funktioniert für mich 😉
Diesen zu nutzen, füge ich diese zu meinem Spiel-Komponente verwenden, Klasse:
Hoffe, das hilft sombody 😀
InformationsquelleAutor MadApples
Haben Sie versucht, etwas einfacheres wie dieses?
Kann es einige Zeit zwischen draw und update, aufgrund der Art, wie das timing funktioniert in XNA, vielleicht ist dies die Ursache für die empfundene pixel-offset?
... Sind Sie sicher, dass Sie "konfiguriert", dass Ihre sprite-batch-richtig? Koordinaten sind relativ zur Spiel-Fenster, so dass die Dokumentation sagen.
Andere Sache: Warum verwenden Sie statische Felder? Ich weiß wirklich nicht, wie diese Wahl, ein anti-pattern. Verwenden Sie Klassen-Felder, die nicht statischen Felder.
Auch... ich denke, Sie zeichnen ein Maus-Symbol, rechts? Bedenken Sie, dass XNA anfangen zu zeichnen, die textur von dem angegebenen Punkt, sind Sie sicher, die textur ist gut geformt, mit dem oberen linken Punkt, wie Sie Ihre Maus-Pfeil Ende?
Fand ich ein schönes Beispiel, hier können Sie gerne: http://azerdark.wordpress.com/2009/07/08/displaying-cursor-xna/
Beachten Sie auch, dass Sie können aktivieren und deaktivieren Sie die normale windows-OS-Maus-cursor mit IsMouseVisible = true;
InformationsquelleAutor Salvatore Previti
Ihre draw-call ist keine Verrechnung der textur überhaupt. Wenn der "Zeiger" Teil des Bildes ist nicht in der 0,0-position (oben Links), Ihre Textur, die Positionierung erscheinen wird ausgeschaltet.
Hinzufügen
Console.WriteLine(pos);
zu Ihrem update zu sehen, die position ist es Zeichnung. Denken Sie daran, um diese zu entfernen, nachdem Ihre Debuggen, da writeline töten Ihre Leistung.Versuchen Sie einen der überladenen SpriteBatch.Draw () - Aufrufe, die Faktor in einer "Herkunft" können Sie entscheiden, welcher Punkt der textur, die gezeichnet werden sollen, in die position. In der folgende code optimieren die Vector 2, basierend auf, wie Sie Ihre textur gezeichnet wird.
InformationsquelleAutor Beanish