Image über Zylinder drehen in 2D [erledigt]
Übersicht

![]() |
d-bugBetreff: Image über Zylinder drehen in 2D [erledigt] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo liebe Gemeinde,
ich hab gerade das Gefühl, dass mein ganzes Wissen für den A... ist! Ich verzweifel daran ein Image kontrolliert über einen Zylinder zu drehen. Ich hab es ja schon mal so weit, dass das Image um 360° gedreht wird, aber ich möchte erstens nicht sehen, wie es hinten wieder hoch geht (also nur die vorderen 180° sollen sichtbar sein) und zweitens soll das ganze später mit vier verschiedenen Images auf jeweils 90° verteilt geschehen. Das ganze soll also aussehen, als würde ich ein Walze drehen, auf der 4 Bilder gemalt sind. Ich zeig euch mal das was ich schon habe: Code: [AUSKLAPPEN] '----------------------------------------------------------------------------------------------------------------------------------------- Global ImagePath:String = "imageroll.png" Graphics 800,600,0 Local Image:TImage = LoadImage (ImagePath) Local TransformingImage:TImageTransform = TImageTransform.Create (Image,(GraphicsWidth()/2)-(Image.Width/2),(GraphicsHeight()/2)) SetClsColor (128,128,128) Repeat TransformingImage.Paint () Flip 1; Cls Until KeyHit (KEY_ESCAPE) Or AppTerminate () '----------------------------------------------------------------------------------------------------------------------------------------- Type TImageTransform '----------------------------------------------------------------------------------------------------------------------------------------- '#FOLD Field Image:TImage Field X:Float, Y:Float Field Offset:Float Field Angle:Float = 0, AngleAddition:Float '#UNFOLD '----------------------------------------------------------------------------------------------------------------------------------------- Function Create:TImageTransform (Image:TImage,X:Float,Y:Float) '#FOLD Local T:TImageTransform = New TImageTransform T.Image = Image T.X = X T.Y = Y Return T End Function '#UNFOLD '----------------------------------------------------------------------------------------------------------------------------------------- Method Paint () '#FOLD SetColor (255,255,255) For Local i:Int = 0 To Self.Image.Height '--------------------------------------------------------------------------------------------------------- 'Fixed by Klepto2 (meinen heißesten Dank dafür) 'Abfrage hinzu '--------------------------------------------------------------------------------------------------------- If Sin(Self.Angle - i) >= 0 Then Self.PaintRect (Self.X , Self.Y + (Cos(Self.Angle - i) * 56) , 0 , i , Self.Image.Width , 1) EndIf Next Self.AngleAddition = 2 Self.Angle:-Self.AngleAddition If Self.Angle < 0 Self.Angle = 360 End Method '#UNFOLD '----------------------------------------------------------------------------------------------------------------------------------------- Method PaintRect (X:Float, Y:Float, rX:Float, rY:Float, rW:Float, rH:Float) '#FOLD Local PortX:Int, PortY:Int, PortW:Int, PortH:Int GetViewport (PortX, PortY, PortW, PortH) SetViewport (X,Y,rW,rH) DrawImage (Self.Image, X-RX,Y-RY) SetViewport (PortX, PortY, PortW, PortH) End Method '#UNFOLD End Type Sieht soweit zwar ganz gut aus, aber ist eben nicht genau das was ich jetzt brauche. Der Ansatz ansich scheint mir schon falsch zu sein, aber mir fehlt leider derzeit vollkommen die Idee, wie ich das umsetzen soll. Ich hoffe ihr habt mein Problem halbwegs verstanden. Das ganze muss nicht mal sonderlich schnell sein, da es in einem Minigame vorkommt, wo sonst nicht all zu viel geschehen wird. Als Image habe ich übrigens probeweise einen Header dieses Forums verwurschtelt. Bitte nicht über die '#FOLD / '#UNFOLD Anweisungen wundern, die gehören zu meinem Textmate-Bundle um dem Editor eben mitzuteilen wann was gefaltet werden soll. Ich danke für eventuelle Hilfe und Aufmerksamkeit! cheers |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group