Drehen Sie eine Grafik-Bitmap in ihrer Mitte

8

Ich arbeite an einem Projekt für die Schule, wir müssen ein einfaches Top-Down-Rennspiel in C # machen, ohne XNA zu benutzen. Zuallererst möchte ich Ihnen sagen, dass die Dinge, die wir bisher über das Programmieren gelernt haben, wenig damit zu tun haben, etwas zu machen, das auch nur entfernt wie ein Rennspiel aussieht. Es wurde nicht schwieriger als Arrays, Schleifen usw. Also haben wir nichts über Grafiken oder ähnliches gelernt.

Nachdem ich alles gesagt habe, habe ich folgendes Problem.

Wir haben ein Graphics-Objekt erstellt und verwenden dann DrawImage und verwenden eine Bitmap aus einem car.jpg.

%Vor%

Dann warten wir auf eine Tastenbetätigung, z. B. rechts

%Vor%

Das Problem ist, dass der Drehpunkt in der oberen linken Ecke liegt. Sobald wir also das Auto zu etwas wie (20,25) bewegen und anfangen es zu drehen, wird (0,0) als Rotationszentrum verwendet. Was wir erreichen wollen, ist der Drehpunkt in der Mitte unseres Autos.

Wir haben versucht, nach Möglichkeiten zu suchen, die centerX und centerY von RotateTransform zu ändern, sind aber zu dem Schluss gekommen, dass dies mit der Bitmap nicht möglich ist. Wir haben seit über 2 Tagen mit diesem Problem zu kämpfen und können anscheinend keine Lösung finden, um das zu erreichen, was wir wollen.

Gibt es etwas, das wir falsch machen, wenn wir das Graphics-Objekt erstellen, oder gibt es eine völlig andere Möglichkeit, centerX und centerY für das Auto zu ändern?

    
BreadleyG 23.10.2014, 10:18
quelle

3 Antworten

5

Um eine rotierte Bitmap zu zeichnen, müssen Sie ein paar Schritte ausführen, um das Objekt Graphics vorzubereiten:

  • Zuerst verschiebst du seinen Ursprung auf den Mittelpunkt der Rotation
  • dann drehen Sie sich um den gewünschten Winkel
  • Als nächstes verschiebst du es zurück
  • Jetzt können Sie die Bitmap zeichnen
  • schließlich setzen Sie Graphics
  • zurück

Dies muss für jede Bitmap durchgeführt werden.

Hier sind die Schritte im Code, um Bitmap bmp an Position ( xPos, yPos ) zu zeichnen:

%Vor%

Es gibt eine mögliche Komplikation: Wenn Ihr Bitmap eine andere dpi Auflösung hat als der Bildschirm, also als Graphics , müssen Sie zuerst die Bitmap dpi Einstellung anpassen!

Um die Bitmap an die übliche 96dpi anzupassen, können Sie einfach ein

tun %Vor%

Um auf zukünftige Retina-ähnliche Anzeigen vorbereitet zu sein, können Sie eine Klassenvariable erstellen, die Sie beim Start festlegen:

%Vor%

und benutze es nach dem Laden der Bitmap :

%Vor%

Wie üblich verwendet die Methode DrawImage die obere linke Ecke von Bitmap . Möglicherweise müssen Sie Points für den Drehpunkt und möglicherweise auch für die virtuelle Position Ihres Autos verwenden, vielleicht in der Mitte der Front.

    
TaW 23.10.2014, 12:09
quelle
2

Hier ist eine statische Klasse, die das Bild an der gewünschten Stelle innerhalb des gewünschten Bereichs malt. Ändern Sie den Rotationswinkel, um das Bild zu drehen. Und Sie können das Bild auch schwenken und zoomen.

Fügen Sie diese Klasse in Ihr Projekt ein und rufen Sie die statischen Funktionen von Win Form auf.

%Vor%

Nach dem Hinzufügen dieses Codes in Ihrem Projekt (besser in separaten CS-Datei hinzufügen), rufen Sie die Funktionen von Win Form-Klasse (Form1.cs).

%Vor%

Wenn Sie jetzt das Bild drehen möchten, stellen Sie einfach den Wert wie gewünscht ein (mit Schieberegler, Knopf oder fügen Sie weitere Funktionen hinzu, um die Mausbewegung zu erkennen und dann zu drehen)

Beispiel: Fügen Sie eine Schaltfläche hinzu, und jedes Mal, wenn Sie auf die Schaltfläche klicken, erhöhen Sie den Wert um 1.

%Vor%     
Sachit Devkota 12.12.2017 10:48
quelle
0

Um die obere linke Ecke von der Mitte aus zu drehen, müssen Sie zuerst den Winkel kennen und dann den gewünschten Winkel einstellen und die neue obere linke Seite durch den neuen Winkel neu berechnen:

%Vor%     
KugBuBu 23.10.2014 12:43
quelle

Tags und Links