Image über Zylinder drehen in 2D [erledigt]

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

d-bug

Betreff: Image über Zylinder drehen in 2D [erledigt]

BeitragMi, Aug 13, 2008 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group