Entwickler-Ecke

Multimedia / Grafik - Ein Mit Canvas gezeichnetes Objekt drehen


leonm - Mi 11.05.11 12:11
Titel: Ein Mit Canvas gezeichnetes Objekt drehen
Hallo Leute,

für den Informatikunterricht bin ich im Moment mit der Entwickelung eines "Nachbaues" von dem Game Cs2d (http://www.cs2d.com) beschäftigt. Nun stehe ich vor dem Problem das ich den Player zwar erzeugen und zeichnen kann =>


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
constructor TPlayer.create (pXKoordinate: Integer; pYKoordinate: Integer; pScreen : TImage);
begin
  zXPosition := pXKoordinate;
  zYPosition := pYKoordinate;
  Icon := TIcon.create();
  Icon.LoadFromFile('res/Player.ico');
  Screen := pScreen;
end;

procedure TPlayer.draw;
begin
  Screen.Canvas.Draw(zXPosition, zYPosition, Icon);
end;


und mit einer Winkelfunktion den Winkel der Maus zum Player berechnen kann, aber es gelingt mir nicht den Player jetzt zu drehen.
Gibt es eine Möglichkeit mit canvas gezeichnete Objekte zu drehen?
Ich habe weder in diesem Forum noch sonstwo eine passende Lösung gefunden...

Danke schonmal im Vorraus,

Leon

Moderiert von user profile iconMartok: Quote- durch Delphi-Tags ersetzt


bummi - Mi 11.05.11 13:22

Ich hatte vor einiger Zeit einmal eine Komponente zur Verfügung gestellt die so etwas nutzt, wenn Du diese nicht direkt nutzen willst fidest Du die benötigten Funktionen in der beiliegenden Datei ExCanvasTools

http://www.delphipraxis.net/156716-grafiken-sehr-einfach-animieren-sprites-mit-drehung-und-zoom.html


leonm - Di 17.05.11 09:13

Hey
also erstmal danke für die schnelle Antwort :D
Werde mich mal an der Implementierung versuchen...
Also ich erstelle im Prinzip eine neue unit "ExCanvasTools", und rufe dann die methode "SetCanvasZoomAndRotation" auf. Nur in welcher Unit? In der Unit Meiner Form, oder in der Unit vom Player? Und was gebe ich dann als ACanvas an?


bummi - Di 17.05.11 10:33

Du rufst PaintGraphic mit dem Canvas auf auf welches Du zeichnen willst, ich habe mal ein Microdemo angehängt.


leonm - Mi 18.05.11 11:54

Ok, super danke, habs jetzt hingekriegt :D