Alphablending / Spritemasken

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

konnte es nicht lassen, mal damit rumzuspielen.... :mrgreen:

Code: Alles auswählen

EnableExplicit

InitSprite()
InitKeyboard()
LoadFont(0,"courier new",64,#PB_Font_Bold)
OpenScreen(800,600,32,"x")
Define EXIT.l = 0
Define n.l
Define c$
Define Row.l = 25
Define Glide.l = 1
Define col1.l
Define col2.l
Define Count.l = 0
Define Shift.d
Define X1.l
Define Y1.l

For n=0 To 10
  CreateSprite(n,55,50)
Next
For n=1 To 5
  TransparentSpriteColor(n,$FFFFFF)
  TransparentSpriteColor(n+5,$000000)
Next
Restore Letters
For n=1 To 5
  Read c$
  StartDrawing(SpriteOutput(n))
    DrawingFont(FontID(0))
    DrawText(2,-22,c$,$FFFFFF,$000000)
  StopDrawing()
Next
Repeat
  ExamineKeyboard()
  ClearScreen($402010)
  Row + Glide
  If Row = 0 Or Row = 49
    Glide = -Glide
  EndIf
  StartDrawing(SpriteOutput(0))
    For n=0 To 24
      col1 = 255 - 10*n
      col2 = col1 * 256 + 255
      Line(0,Row + n     ,55,0,col2)
      Line(0,Row - n     ,55,0,col2)
      Line(0,Row + 25 + n,55,0,col1)
      Line(0,Row - 25 - n,55,0,col1)
    Next
  StopDrawing()
  Count + 1
  If Count > 314159265
    Count = 0
  EndIf
  For n=5 To 1 Step -1
    UseBuffer(n+5)
      DisplaySprite(0,0,0)
      DisplayTransparentSprite(n,0,0)
    UseBuffer(-1)
    Shift = Count - 20*n
    X1 = 400 - 27 + 250*Sin(Shift / 37)
    Y1 = 300 - 25 + 250*Cos(Shift / 29)
    DisplayTransparentSprite(n+5,X1,Y1)
  Next
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) 
End
DataSection
Letters:
Data.s "K","A","E","R","U"
EndDataSection
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

sieht cool aus :allright:
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Wieso soll das mit Sprite3D nicht möglich sein!?

Code: Alles auswählen

InitSprite()
InitSprite3D()
OpenWindowedScreen(OpenWindow(0,0,0,640,480,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu),0,0,640,480,0,0,0)
CreateSprite(0,256,256,#PB_Sprite_Texture)
CreateSprite3D(0,0)
CreateSprite(1,256,256,#PB_Sprite_Texture)
CreateSprite3D(1,1)
StartDrawing(SpriteOutput(0))
  For y = 0 To 10
    DrawText(5,y*20+5,"ABCDEFGHIJKLMNOPQRSTUVWXYZ",$FFFFFF,0)
  Next
StopDrawing()
StartDrawing(SpriteOutput(1))
  For x = 0 To 255 Step 8
    For y = 0 To 255 Step 8
      Box(x,y,8,8,Random($FFFFFF))
    Next
  Next
StopDrawing()

  #D3DBLEND_ZERO            = 1
  #D3DBLEND_ONE             = 2
  #D3DBLEND_SRCCOLOR        = 3
  #D3DBLEND_INVSRCCOLOR     = 4
  #D3DBLEND_SRCALPHA        = 5
  #D3DBLEND_INVSRCALPHA     = 6
  #D3DBLEND_DESTALPHA       = 7
  #D3DBLEND_INVDESTALPHA    = 8
  #D3DBLEND_DESTCOLOR       = 9
  #D3DBLEND_INVDESTCOLOR    = 10
  #D3DBLEND_SRCALPHASAT     = 11
  #D3DBLEND_BOTHSRCALPHA    = 12
  #D3DBLEND_BOTHINVSRCALPHA = 13

Repeat
  Start3D()
    Sprite3DBlendingMode(#D3DBLEND_SRCALPHA, #D3DBLEND_INVSRCALPHA)
    DisplaySprite3D(0,0,0)
    DisplaySprite3D(1,300,0)
    
    
    DisplaySprite3D(0,0,256)
    Sprite3DBlendingMode(#D3DBLEND_DESTCOLOR, #D3DBLEND_ZERO)
    DisplaySprite3D(1,0,256)
  Stop3D()
  FlipBuffers()

  we = WindowEvent()
  While we
    Select we
      Case #PB_Event_CloseWindow
        quit = #True
    EndSelect
    we = WindowEvent()
  Wend
Until quit
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten