ich steh sehr gewaltig auf dem Schlauch.
Ich erstelle ein Image mit Transparenz-Flag, erstelle ein Sprite mit AlphaBlending-Flag.
Auf das Image zeichne ich mit Vector-Funktionen ein wenig zum testen, zeichne das Image mit DrawAlphaImage auf das Sprite und lasse es mit DisplayTransparentSprite überlappend anzeigen.
Leider klappt es mit der Transparenz nicht, wie ich mir das vorstelle.
Lasse ich das Flag #PB_Sprite_AlphaBlending bei der Sprite-Erstellung weg, hat es nur einen Pseudo-Effekt. In diesem Moment wird nur Schwarz als Transparent angesehen, was aber nicht zweck der Übung ist.
Kann mir irgendwer auf die Sprünge helfen, wie ich die 2 Sprites unter Berücksichtigung des Alphakanals korrekt übereinander gelegt bekomme, sodass beide gerundeten Rechtecke korrekt und mit sauberer Kontur zu sehen sind und die 2 roten Flächen an der Stelle der Überlappung kräftiger werden (also wie normal zu erwarten)?
Für mein eigentliches Programm bin ich auf die Vector-Befehle angewiesen um zur Laufzeit Grafiken für die Sprites zu erstellen - allerdings ohne funktionierendes Alpha stehe ich jetzt vor einer Wand
Danke euch schon mal riesig für einen kleinen Denkanstoß und hoffentlich einen guten Schlag gegen den Kopf.
Hier der Beispielcode zum aufzeigen meines Problems und wie ich es aktuell dachte zu lösen.
Zu erkennen, dass ich auch schon etwas mit DrawingMode und weglassen des Flags bei CreateSprite getestet habe, leider ohne Erfolg.
PS: Nicht wundern in der Procedure über sizeX und sizeY - bin kein Freund der Bezeichnungen width und heigth
Code: Alles auswählen
Procedure AddPathBoxRounded(x, y, sizeX, sizeY, radius, flags = #PB_Path_Default)
MovePathCursor(x + radius, y, flags)
AddPathArc(sizeX-radius, 0, sizeX-radius, radius, radius, #PB_Path_Relative)
AddPathArc(0, sizeY-radius, -radius, sizeY-radius, radius, #PB_Path_Relative)
AddPathArc(-sizeX+radius, 0, -sizeX+radius, -radius, radius, #PB_Path_Relative)
AddPathArc(0, -sizeY+radius, radius, -sizeY+radius, radius, #PB_Path_Relative)
EndProcedure
If InitSprite() = 0
MessageRequester("Error", "Can't open screen & sprite environment!", 0)
End
EndIf
OpenWindow(0, 0, 0, 400, 300, "Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 0, 0, 400, 300, 0, 0, 0, #PB_Screen_WaitSynchronization)
tempimg = CreateImage(#PB_Any, 100, 100, 32, #PB_Image_Transparent)
spr = CreateSprite(#PB_Any, 100, 100, #PB_Sprite_AlphaBlending)
;spr = CreateSprite(#PB_Any, 100, 100)
If StartVectorDrawing(ImageVectorOutput(tempimg, #PB_Unit_Pixel))
AddPathBoxRounded(1, 1, 98, 98, 40)
VectorSourceColor(RGBA(255, 255, 255, 255))
StrokePath(1, #PB_Path_Default)
AddPathBox(40, 40, 20, 20)
VectorSourceColor(RGBA(255, 0, 0, 100))
FillPath()
StopVectorDrawing()
EndIf
StartDrawing(SpriteOutput(spr))
;DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawAlphaImage(ImageID(tempimg), 0, 0)
StopDrawing()
Repeat
Repeat
event = WindowEvent()
Select event
Case #PB_Event_CloseWindow : End
EndSelect
Until event = 0
FlipBuffers()
ClearScreen(RGB(127, 127, 127))
DisplayTransparentSprite(spr, 0, 0)
DisplayTransparentSprite(spr, 10, 10)
Delay(2)
ForEver