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?
Um eine rotierte Bitmap
zu zeichnen, müssen Sie ein paar Schritte ausführen, um das Objekt Graphics
vorzubereiten:
Bitmap
zeichnen
Graphics
Dies muss für jede Bitmap durchgeführt werden.
Hier sind die Schritte im Code, um Bitmap bmp
an Position ( xPos, yPos
) zu zeichnen:
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
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
:
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.
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%