Seite 1 von 2

Transparens vom 3dSprite auf 120

Verfasst: 02.05.2009 19:46
von super_castle
Hallo, wenn ich ein 3dSprite mit dem Wert 120 durchsichtig machen möchte, kommt allmählich als Körperfarbe das Lila zum vorschein, welches ja dazu dient bestimmt Teile vom Sprite nicht anzuzeigen.
Ich möchte das das Sprite langsam verschwindet und nicht das der Untergrund des Sprites zum vorschein kommt.

DisplaySprite3D(0, 20,20,120)

Welchen Trick gibt es da ?
mfg

Verfasst: 02.05.2009 19:52
von Kaeru Gaman
> kommt allmählich als Körperfarbe das Lila zum vorschein, welches ja dazu dient bestimmt Teile vom Sprite nicht anzuzeigen.

achja?

die default-transparenzfarbe ist schwarz, also wo ist das problem mit lila?


nein sorry, also mal ernsthaft.


würdest du bitte deine Fragen mit mehr Informationen versehen,
zum Beispiel Code posten der das Problem deutlich zeigt?

Verfasst: 02.05.2009 20:04
von super_castle
Vergiss lila, ich habe jetzt die Farbe schwarz genommen als Hintergrund für das Grabsprite.

DisplaySprite3D(0, 20,20,155), dabei kommt der Hintergrund (schwarz) allmählich zum Vorschein. Ich möchte das das Sprite durchsichtig wird und langsam verschwindet, je kleiner der Wert wird.

mfg

Code: Alles auswählen

Global x1.f,y1.f,dx.f,dy.f,winkel.f,colli.l

  Procedure sprite_grab()   
    DisplaySprite( 3,0,0) 
    Start3D()
      RotateSprite3D(0,winkel,0)
      DisplaySprite3D(0, 20,20,155)
    Stop3D() 
    GrabSprite( 2, 0, 0, 104,104,0)
  EndProcedure   
 
  InitSprite()
  InitSprite3D()
 
  OpenWindow(0,0,0,800,600,"sprites!",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
  OpenWindowedScreen(WindowID(0),10,10,500,500,0,0,0)

  CreateSprite(0,64,64,#PB_Sprite_Texture)
  CreateSprite3D(0, 0)
  StartDrawing(SpriteOutput(0))
    Box(0,0,64,64,RGB(255,0,0))
  StopDrawing()
 
  CreateSprite(1,64,64,#PB_Sprite_Texture)
  StartDrawing(SpriteOutput(1))
    Circle(32,32,30,RGB(0,0,255))
  StopDrawing()
  
  CreateSprite(3,104,104,#PB_Sprite_Texture)
  StartDrawing(SpriteOutput(3))
    Box(0,0,104,104,RGB(0,0,0))
  StopDrawing()
  
  dx=100
  dy=100
  
  ClearScreen(RGB(255,255,0))
  
  sprite_grab()
  
  DisplaySprite( 2, dx,dy)
  
  OpenConsole()
   
  Repeat
 
    Event.l = WindowEvent()   
   
    ClearScreen(RGB(255,255,0))

    If GetAsyncKeyState_(#VK_Z)
       winkel=winkel+1     
    ElseIf GetAsyncKeyState_(#VK_R)
      winkel=winkel-1
    EndIf
   
    If GetAsyncKeyState_(#VK_T)
      y1=Sin(winkel/180*#PI)*1
      x1=Cos(winkel/180*#PI)*1
      dx+x1
      dy+y1   
    ElseIf GetAsyncKeyState_(#VK_G)
      y1=Sin(winkel/180*#PI)*1
      x1=Cos(winkel/180*#PI)*1
      dx-x1
      dy-y1
    EndIf

    sprite_grab()
    
    DisplayTransparentSprite( 1, 200,200)  
    DisplayTransparentSprite( 2, dx,dy)
    
    colli=SpritePixelCollision(2,dx,dy, 1,200,200)
    If colli=1
        PrintN(Str(colli))
      Else
        PrintN(Str(colli))
    EndIf  
    
    FlipBuffers()
     
    Until Event = #PB_Event_CloseWindow   

End 

Verfasst: 02.05.2009 20:08
von Kaeru Gaman
still don't get it....

Verfasst: 02.05.2009 20:42
von KeyKon
Mir is nich ganz klar was der Code soll, in dem kommt doch überhaupt kein DisplaySprite3D() vor...

Verfasst: 02.05.2009 21:04
von super_castle
Habe jetzt eine Lösung gefunden.
Das fahrende Sprite 2 gesetzt, dann Clearscreen hierher verlegt, dann den Colliblock gesetzt und das 3dSprite 0 welches oben gedreht wird an die gleiche Stelle gesetzt, wie das fahrende Sprite 2 hinter dem Hintergrund.

Der Zeitaufwand ist nicht wesentlich grösser, weil das setzen eines 3dSprite zusätzlich, etliche hundertmal schneller geht als das normale Sprite. Klappt jetzt wunderbar.

mfg

Code: Alles auswählen

.......
.......
    sprite_grab()
     
    DisplayTransparentSprite( 2, dx,dy)
    ClearScreen(RGB(255,255,0))
    DisplayTransparentSprite( 1, 200,200) 
    Start3D()
      DisplaySprite3D(0, dx+20,dy+20,55)
    Stop3D() 
    
    colli=SpritePixelCollision(2,dx,dy, 1,200,200)


Verfasst: 02.05.2009 21:06
von super_castle
Mir is nich ganz klar was der Code soll, in dem kommt doch überhaupt kein DisplaySprite3D() vor...

Doch in der Procedure, es wird gedreht für das Collisonssprite(Grabsprite).

mfg

Verfasst: 02.05.2009 21:22
von super_castle
Jup, vielen dank für die Sprite-Hilfe.
Jetzt komme ich wieder ein Stück weiter.
Kann ich jetzt wunderbar ausbauen mit allen Tricks.

mfg

Hier das Trans-Beispiel mit dem Trans-Rechteck und dem Kreis als Hindernis :

Code: Alles auswählen


Global x1.f,y1.f,dx.f,dy.f,winkel.f,colli.l

  Procedure sprite_grab()   
    DisplaySprite( 3,0,0) 
    Start3D()
      RotateSprite3D(0,winkel,0)
      DisplaySprite3D(0, 20,20,255)
    Stop3D() 
    GrabSprite( 2, 0, 0, 104,104,0)
  EndProcedure   
 
  InitSprite()
  InitSprite3D()
 
  OpenWindow(0,0,0,800,600,"sprites!",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
  OpenWindowedScreen(WindowID(0),10,10,500,500,0,0,0)

  CreateSprite(0,64,64,#PB_Sprite_Texture)
  CreateSprite3D(0, 0)
  StartDrawing(SpriteOutput(0))
    Box(0,0,64,64,RGB(255,0,0))
  StopDrawing()
 
  CreateSprite(1,64,64,#PB_Sprite_Texture)
  StartDrawing(SpriteOutput(1))
    Circle(32,32,30,RGB(0,0,255))
  StopDrawing()
  
  CreateSprite(3,104,104,#PB_Sprite_Texture)
  StartDrawing(SpriteOutput(3))
    Box(0,0,104,104,RGB(0,0,0))
  StopDrawing()
  
  dx=100
  dy=100
  
  ClearScreen(RGB(255,255,0))
  
  sprite_grab()
  
  DisplaySprite( 2, dx,dy)
  
  OpenConsole()
   
  Repeat
 
    Event.l = WindowEvent()   

    If GetAsyncKeyState_(#VK_Z)
       winkel=winkel+1     
       sprite_grab()
    ElseIf GetAsyncKeyState_(#VK_R)
      winkel=winkel-1
      sprite_grab()
    EndIf
   
    If GetAsyncKeyState_(#VK_T)
      y1=Sin(winkel/180*#PI)*1
      x1=Cos(winkel/180*#PI)*1
      dx+x1
      dy+y1   
    ElseIf GetAsyncKeyState_(#VK_G)
      y1=Sin(winkel/180*#PI)*1
      x1=Cos(winkel/180*#PI)*1
      dx-x1
      dy-y1
    EndIf
    
    DisplayTransparentSprite( 2, dx,dy)
    ClearScreen(RGB(255,255,0))
    DisplayTransparentSprite( 1, 200,200) 
    Start3D()
      DisplaySprite3D(0, dx+20,dy+20,55)
    Stop3D() 
    
    colli=SpritePixelCollision(2,dx,dy, 1,200,200)
    If colli=1
        PrintN(Str(colli))
      Else
        PrintN(Str(colli))
    EndIf  
    
    FlipBuffers()
     
    Until Event = #PB_Event_CloseWindow   

End 


Verfasst: 03.05.2009 11:32
von Andesdaf
@super_castle: Zum Zitieren bitte quote tags benutzen (quote)(/quote) mit
eckigen Klammern.

Verfasst: 03.05.2009 12:59
von super_castle
Warum machst du runde Klammern beim Beschreiben? :D