Transparens vom 3dSprite auf 120

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

Transparens vom 3dSprite auf 120

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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?
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 »

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 
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

still don't get it....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Mir is nich ganz klar was der Code soll, in dem kommt doch überhaupt kein DisplaySprite3D() vor...
(\/) (°,,,°) (\/)
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag 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)

Zuletzt geändert von super_castle am 02.05.2009 21:08, insgesamt 1-mal geändert.
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag 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
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag 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 

Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

@super_castle: Zum Zitieren bitte quote tags benutzen (quote)(/quote) mit
eckigen Klammern.
Win11 x64 | PB 6.20
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag von super_castle »

Warum machst du runde Klammern beim Beschreiben? :D
Antworten