Autor Beitrag
neo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179



BeitragVerfasst: Do 12.06.03 21:44 
Hallo!

Wie kann ich bei DX die Bilder um den Bildmittelpunkt drehen?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 191

Win XP
Delphi 6 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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!

_________________
mfg.
mâximôv
CC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mi 01.10.03 14:23 
1) ich meine Delphi X
2) inherited rufe ich auf; wie geht das denn anders?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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?

_________________
mfg.
mâximôv
CC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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

_________________
mfg.
mâximôv
CC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: 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