Grabsprite wird nicht durchsichtig

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Grabsprite wird nicht durchsichtig

Beitrag von super_castle »

Das Grabsprite 2 wird nicht durchsichtig dargestellt wenn ich über den blauen Kreis fahre, obwohl ich Tansparent mit 255,255,0 eingestellt habe.
Es ist ein Testprogramm.
Möchte 3dSprite rotieren und dann für die kollision verwenden mit Grabsprite, was ja nur mit den normalen Sprite geht.

Wo ist der Fehler?

mfg

Code: Alles auswählen


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

  Procedure sprite_grab()   
    Start3D()
      RotateSprite3D(0,winkel,0)
      DisplaySprite3D(0, 20,20,255)
    Stop3D() 
    GrabSprite( 2, 0, 0, 104,104)
  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)
  ;OpenWindowedScreen(WindowID(0),-100,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))
    Box(0,0,64,64,RGB(255,0,255))
    Circle(32,32,30,RGB(0,0,255))
  StopDrawing()
  
  TransparentSpriteColor(0, RGB(255, 0, 255))
  TransparentSpriteColor(1, RGB(255, 0, 255))
  TransparentSpriteColor(2, RGB(255,255,0))
 
  dx=100
  dy=100
  
  ClearScreen(RGB(255,255,0))
  
  sprite_grab()
  DisplaySprite( 2, dx,dy)
   
  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)
    
    FlipBuffers()
     
    Until Event = #PB_Event_CloseWindow   

End 
Zuletzt geändert von super_castle am 02.05.2009 15:03, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich bekomme hier nen "sprite object not initialized" beim versuch der zuweisung der transparenzfarbe für Sprite 2...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag von super_castle »

Eigentlich stimmt deine Fehlermeldung, weil Grabsprite 2 erst nach diesem Befehl kommt.

Warum funktioniert es bei mir ohne Fehlermeldung?..hmmm.
Nur wird das Grabsprite nicht durchsichtig.

Xp mit SP 2 und 32bit Farbtiefe.

Neueste Purebasic runtergeladen.

Setz mal "sprite_grab()" vor der Fehlermeldung mit der transparenten Farbe.

mfg
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ok... nachdem ich mich jetzt durchgebissen hab was wie laufen soll...

setze mal das TransparentSpriteColor in die sprite_grab routine, direkt hinter das Grab.

Begründung:
TransparentSpriteColor setzt die Transparenzfarbe für ein existierendes Sprite.
wenn du GrabSprite benutzt, wird ein neues Sprite erzeugt, und dementsprechend die alte Transparenzfarbe deaktiviert.

Entweder du setzt eine allgemeine Transparenzfarbe mit
TransparentSpriteColor( #PB_Default, Color )
dann wird für alle später erzeugten Sprites diese Farbe verwendet,

oder du setzt die Transparenzfarbe nach jeder Erzeugung neu - sprich nach jedem Grab, dann funktioniert sie auch.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag von super_castle »

Jup, danke.
jetzt funktioniert es.

mfg
Antworten