2012-04-05 12 views
1

Ich startete ein sehr einfaches XNA 4.0-Programm, in dem ich ein kleines rotes Bild eines Punktes über den Inhaltslader einlud. Der rote Punkt ist 10x10 und ist an den Rändern abgerundet, so dass er rund aussieht. Ich zeichne es auf dem Bildschirm und aktualisiere seine X- und Y-Positionen auf die der X- und Y-Position der Maus. Also im Grunde ist es ein benutzerdefinierter roter Cursor.XNA Basic Paint-Programm

Nun ist meine Frage: Wie würde ich gehen mit diesem Cursor als Pinsel? Wenn ich mit der linken Maustaste klicke, möchte ich auf einen leeren Texture2D-Hintergrund malen, der die Größe des aktuellen Bildschirms hat. Es würde genau wie ein Pinsel in MSPAINT funktionieren.

Ich stelle mir vor, ich würde ein Array von Vector2 Punkten benötigen, die die Punkte enthält, die die Maus bewegt hat, und für jeden dieser Punkte, wenn das Update auftritt malt der Punkt auf dem Hintergrund Texture2D?

Es ist wahrscheinlich nicht sehr effizient, aber es war alles, was ich zu der Zeit denken konnte.

Ich habe auch in wechselnde Farbdaten von Texture2Ds gelesen, aber leider hatten wir kein Glück.

+0

Warum speichern Sie nicht ein Speicherabbild der wer Leinwand und wann immer Sie "zeichnen" einen neuen Punkt hinzufügen, aktualisieren Sie das Bild, so dass die Aktualisierung nur das Zeichnen des Bildes von einem Teil des Bildes erfordern ... wie auch immer ich bin ahnungslos in XNA ist dies nur eine Idee nicht sicher, ob es hier gültig ist. –

+0

Implementieren Sie es so, wie Sie es für jedes andere Programm, das diese Fähigkeit hat. Du verwendest XNA nicht speziell. Wenn Sie nicht wissen, wie man überhaupt anfängt, dann gehen Sie aus Ihrer Liga, jemanden engagieren, der weiß, was sie tun. Ich meine, Sie haben einen Informatikgrad, Sie behaupten, Sie hätten Erfahrung mit DirectX, etwas sagt mir, dass Ihr Profil voller Lügen ist. –

+0

Ramhound, Es tut mir leid, dass Sie so fühlen, aber ich denke, das ist ein wenig hart, Werfen Sie einen Blick auf mein Portfolio, wenn Sie mir nicht glauben http://www.sourcemodding.com/portfolio/index.html Ich kann Ihre Skepsis verstehen, da dies mein erster Beitrag auf stackoverflow ist, der besagt, dass Sie kein Recht haben, mein Profil zu beanspruchen "ist voller Lügen" Stackoverflow ist eine seriöse Community, die für ihren hohen Grad an hilfsbereiten Bürgern bekannt ist. zu deiner Information auch Ramhound, Ive hat die letzten 4-5 Stunden damit verbracht, daran zu arbeiten, es herauszufinden und ich habe es endlich herausgefunden. Versuchen Sie, beim nächsten Mal ein wenig verständnisvoller zu sein. danke – TheFooFighter

Antwort

1

Für diejenigen von euch, die daran interessiert sind, wie ich es geschafft, hier https://[email protected]/thefoofighter/paint.git

Seine sicherlich beste Weg zu „malen“ dem Bildschirm kann der gesamte Code-Repository zu finden, mein Problem zu nähern, aber es tut, was ich brauche, es zu tun, und da ich nicht über Optimierung mit dem größeren Programm sorgen muss, das im porting, das ich nicht versucht habe, es besser machend.

Es gibt eine Readme-Datei mit dem obigen Git, die weitere Informationen zu Änderungen und Optimierungen enthält.

3

Ich habe nie versucht, mit XNA zu malen, aber wie die Idee! Also habe ich mich ein wenig umgeschaut und herausgefunden, dass diese Frage beantwortet wurde und wer weiß, dass es genau das ist, was du brauchst! Viel Glück mit Ihrem Spiel. XNA draw/paint onto a Texture2D at runtime

+0

Ich habe es geschafft, es nicht genau von der Verbindung herauszufinden, die Sie oben zur Verfügung gestellt haben, aber es führte mich zu, was schließlich das Problem löste. Wenn Sie interessiert sind, können Sie meine eigene Antwort auf die Frage überprüfen :). Danke – TheFooFighter

+0

Kein Problem, aber Sie wissen, dass Sie eine echte Antwort auf Ihre Frage hinzufügen und akzeptieren können? Macht die Dinge klarer;) – phadaphunk

+0

Ich denke, ich weiß, was du meinst "meine eigene Frage zu beantworten"? Ich habe versucht, aber ich muss 4 Stunden warten, da ich ein neuer Benutzer bin, bevor ich kann. Ich werde das tun, wenn die 4 abgelaufen sind :) wenn Sie es sich anschauen möchten, finden Sie es hier https: //[email protected]/thefofighter/paint.git – TheFooFighter

0

Bei Loadcontent:

var renderTarget = RenderTarget2D(graphicsDevice, width, height, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.PreserveContents); 

bei Streck:
- gesetzt dieses rendertarget
- ziehen, um die Bürste an der current
- ungesetzt der rendertarget
- zeichnen die rendertarget

Auf diese Weise müssen Sie keine Daten aus dem Rendertarget auf der Textur setzen oder aufheben oder den Previo verfolgen uns Positionen.