Entwickler-Ecke
Multimedia / Grafik - DX: Bilder um den Bildmittelpunkt drehen
neo - Do 12.06.03 21:44
Titel: DX: Bilder um den Bildmittelpunkt drehen
Hallo!
Wie kann ich bei DX die Bilder um den Bildmittelpunkt drehen?
Quelltext
1:
| drawRotate(TDirectDrawSurface;x;y;Width;Height;patterindex;centreX;centreY;Angle) |
Alles andere habe ich schon geschafft, nur ich komm nicht drauf wies um den Mittelpunkt geht.
Danke!!!
geronimo - Do 12.06.03 22:08
hallo. ich habs bisher noch nicht gemacht, aber ....
ich nehm doch an, dass centreX und centreY den mittelpunkt bilden. bekommste über x + width/2 usw raus. angle ist der winkel, den du willst.
weiter kann ich dir im moment auch nit helfen. sry :(
Borlox - Fr 13.06.03 12:15
Titel: Mittelpunkt
Du musst einfach bei CenterX und CenterY jeweils 0.5 eintragen, dann wird das Bild genau in der Mitte gedreht!
Die Skala geht von 0 bis 1 ! Also wenn du um einen anderen Punkt drehen möchtest, dann musst du dir das ausrechnen!
CC - Mi 01.10.03 12:39
Titel: weitere Frage
Cool! Genau das hab ich gesucht!
nur ich hab das jetzt in meinem "Autorennen" eingebaut, damit sich das Auto drehen kann, aber leider ist die "original Auto" Grafik immer noch da!
Also die Grafik dreht sich nicht mit dem obigen Befehl, sondern es wird eine neue gedreht Grafik gezeichnet!
ist mir auch egal, wenn ich nur irgendwie das andere wieder weg bekomme! ;)
und stimmen dann auch noch alle Koordinaten überein? damit die Kollisionsabfrage klappt und so?
VIELEN DANK!
CC
maximus - Mi 01.10.03 13:30
Meinst du mit DX etwa DelphiX? (IMAO bedeutet DX immer directX)
Wenn ja...dann zeig mal die draw-procedure möglicherweise rufst du inherited auf, was natürlich dazu führt, das das sprite zweimal gezeichnet wird!
In delphiX ist der winkel übrigens 256 basiert und wenn du rotiert zeichnest wird die kollision nicht mehr funktinieren!
CC - Mi 01.10.03 14:23
1) ich meine Delphi X
2) inherited rufe ich auf; wie geht das denn anders?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TAuto.DoMove(MoveCount: Integer); begin inherited DoMove(MoveCount);
if isRight in Form1.DXInput1.States then DrehWinkel := DrehWinkel + 1;
if isLeft in Form1.DXInput1.States then DrehWinkel := DrehWinkel - 1;
Image.drawRotate(Form1.DXDraw1.Surface,Round(X),Round(Y),Width,Height,0,0.3,0.5,Round(DrehWinkel*(255/360))); // Drehwinkel ist in Grad end; |
3) mit dem Winkel weiß ich, danke; aber ich kann das ja in Grad und alles andere umrechnen; wieso geht die Kollision dann nicht mehr bzw. wie geht es anderes die Kollision abzufragen? (muss ja irgendwie gehen; GTA etc.)
DANKE!!
CC
maximus - Mi 01.10.03 15:23
aha...soso...du zeichnest also in der move routine :? ..das sollte dir verdächtig vorkommen, denn was macht er wohl in der draw routine? ...zeichnen natürlich! Dh. du zeichnest in zwei routinen...ergo zwei bilder :wink:
Tu den draw-code in die virtuelle methode 'doDraw' und lass dort das inherited weg!
@GTA kollision: GTA ist nicht mit delphiX programmiert worden :wink: ...du kannst dir natürlich deine eigenen kollisionen schreiben. Machst du pixel oder bounding-box kollision?
CC - Mi 01.10.03 19:06
danke!!
hab gerade erst mit Delphi X angefangen ... daher plan ich noch nicht alles!
0) Z.B die ganzen festgelegten Prozeduren und so, sind die nicht irgendwo mal alle aufgelistet und erklärt?
1) Zum Verständnis: DXSpriteEngine1.Move(1); ruft die DOMove Prozeduren auf?
2) bounding-box heißt wahrscheinlich eben ein Eckigen Kasten ums Auto?
Da mein Auto sowieso relativ Rechteckig ist, wäre da fast kein unterschied zu Pixelgenau.
Muss mir nochmal überlegen wie das selber geht! aber könnte ich schaffen, wenn das andere wirklich net geht --> Warum denn net?
DANKE SCHÖN!!
CC
maximus - Mi 01.10.03 23:32
@ 0: sind ja nur zwei...doMove und doDraw...sind virtuelle methoden!
@ 1: Ja genau...das ganze nennt sich 'polymorphie' und sorgt dafür, das die engine, die ja nur die superklasse DXSprite kennt, trotzdem die doMove methode, aus deiner abegeleiteten klasse, aufrufen kann ...und das ganze nur durch das wörtchen 'override'!
@ 2: pixel-dings nervt eh nur...delphiX kann das nicht, weil in der kollisions routine die boxen nicht mit der rotation transformiert werden! ..weil is auch nicht ganz trivial.
mfg
CC - Do 02.10.03 09:37
danke schön für due Hilfe!!!
werde jetzt erstmal weiter machen und wenn ich noch Fragen habe, wird mir hier sicher sehr gut geholfen!! --> Klasse!!
CC
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!