Seite 1 von 6

Hilfe, Transparenz funktioniert nur bei mir :(

Verfasst: 26.11.2004 20:29
von MVXA
Hallo !
Ich bastel grad ein kleines Spiel. Dazu render ich Sprites (was denn sonst /:->) mit transparentem Hintergrund. Nun habe ich das Problem, dass die Sprites nur bei mir transparent aussehen :shock:.

Kann mir jemand ein Beispiel geben mit dem auf allen PCs eine Sprite transparent dargestellt wird ? Danke schon mal im voraus :D

Verfasst: 26.11.2004 20:34
von Kaeru Gaman
ui, kannst du das problem konkretisieren?
vielleicht code?

mir ist so ein problem noch nicht aufgetreten.

haben die anderen vllt. linux, also kein DX7?
aber die grundfunktionen sollten doch laufen - hmmm

Re: Hilfe, Transparenz funktioniert nur bei mir :(

Verfasst: 26.11.2004 20:35
von Danilo
LittleFurz hat geschrieben:Kann mir jemand ein Beispiel geben mit dem auf allen PCs eine Sprite transparent dargestellt wird ? Danke schon mal im voraus :D
Nimm als Transparenzfarbe Schwarz (RGB 0,0,0) und als
dunkelste Farbe RGB 8,8,8 für nicht-transparent.

Siehe:
- Schweinchenrosa
- TransparentSpriteColor-Problem und Lösung

Verfasst: 26.11.2004 20:50
von MVXA
hmhhh.... Danke !
Ich hab aber als Farbtiefe 32-Bit eingestellt. Die transparente Farbe bei den Sprites ist übrigens 128,128,128. Da war ich mir 100%tig sicher, dass sie sogar auf der 16 Farben palette vorhanden ist. Als transparente Farbe mag ich nicht grade so schwarz nehmen :( Die brauch ich wo anders :(

[Edit:]
hat auch nicht geholfen :? Mich macht es stuzig das es nur bei mir funktioniert. auf 4 getesteten PCs hat es nur bei mir gearbeitet o_O

Verfasst: 26.11.2004 21:29
von Serge
PB hat einen Fehler bei der Farbwertberechnung im 16bit modus.
Du solltest wie schon gesagt 255, 0, 255 als Transparente Farbe nehmen und es dürfte auf allen PC's gehen.

Verfasst: 26.11.2004 21:31
von Danilo
LittleFurz hat geschrieben:Als transparente Farbe mag ich nicht grade so schwarz nehmen :(
Dann eben nicht.
LittleFurz hat geschrieben:Die brauch ich wo anders :(
Du solltest ja schwarz auf 8,8,8 umstellen. Da sieht man
den Unterschied bestimmt nicht, da 8,8,8 sehr dunkel ist.

- http://www.robsite.de/php/pureboard-arc ... 39&start=2
- http://www.robsite.de/php/pureboard-arc ... 74&start=1
- http://www.robsite.de/php/pureboard-arc ... 54&start=4

Andere Leute haben schon öfters dieses Problem gehabt, und
mit Transparenz 0,0,0 + kleinste richtige Farbe 8,8,8 ging es dann.
Weiß (RGB(255,255,255)) sollte auch funktionieren. 0 oder 255.
LittleFurz hat geschrieben:[Edit:]
hat auch nicht geholfen :? Mich macht es stuzig das es nur bei mir funktioniert. auf 4 getesteten PCs hat es nur bei mir gearbeitet o_O
Da hast Du wohl Pech. Kein Code, keine Bilder, keine Hilfe.

Probier mal den Code:
http://www.robsite.de/php/pureboard/vie ... c&start=38

Dort ist ein transparenter MausPfeil mit RGB( 0, 0, 0 ) als
Transparenzfarbe und RGB( 8, 8, 8 ) für schwarz.

Verfasst: 26.11.2004 22:02
von Kaeru Gaman
yo, 32bit/16bit-kompatibilität ist definitiv eine herausforderung, da stimme ich den anderen zu.

eine lösung wie (0,0,0) oder (255,0,255) oder (255,255,255) ist echt zu empehlen, da volle sowie leere farbregister fehlerfrei zwischen den modi übertragen werden.

danilos lösung ist durchaus gut, ich löse das auch manchmal so, allerdings mag das ziemlich arbeit sein, die farben zu verändern, wenn man kein passendes tool dafür hat.
und auf website-grafix (was ja nicht dein thema ist, wollts nur erwähnen) geht das nicht, das gibt flecken, denn das dunkelste grau ist #333333, also (51,51,51)

[edit]
@Danilo ich weiss, *freundlich lächel*, hascha recht.

Verfasst: 26.11.2004 22:09
von Danilo
Kaeru Gaman hat geschrieben:allerdings mag das ziemlich arbeit sein, die farben zu
verändern, wenn man kein passendes tool dafür hat.
Dann schreibt man sich ein Mini-Tool dafür.

Sprite laden, dunkle Farben kleiner 8,8,8 damit ersetzen,
transparente Farbe auf 0,0,0 setzen.

Verfasst: 26.11.2004 22:47
von MVXA
Hier das kleine Bild:
Bild

Hier der Code:

Code: Alles auswählen

#sptSoldat = 0
#sp3Soldat = 0

Procedure.l GetTrans(Sprite.l)
    DefType.l PixelColor
    
    Debug Sprite
    If StartDrawing(SpriteOutput(Sprite))
        PixelColor = Point(0, 0)
        StopDrawing()
    EndIf
    ProcedureReturn PixelColor
EndProcedure

InitSprite()
InitSprite3D()
InitKeyboard()
UsePNGImageDecoder() 

OpenScreen(1024, 768, 32, "Test")

LoadSprite            (#sptSoldat, "gfx\Soldier0.png", #PB_Sprite_Texture)
TransparentSpriteColor(#sptSoldat, Red(GetTrans(#sptSoldat)), Green(GetTrans(#sptSoldat)), Blue(GetTrans(#sptSoldat)))
CreateSprite3D        (#sptSoldat, #sp3Soldat)

Sprite3DQuality(1)
RotateSprite3D(#sp3Soldat,0,1)

Repeat 
	ClearScreen(128, 128, 128)
    
    ExamineKeyboard()
    
    If KeyboardPushed(#PB_Key_Escape)
        Break 1
    EndIf
    
    If Start3D()
        RotateSprite3D(#sp3Soldat, 1,1)
        DisplaySprite3D(#sp3Soldat, 20, 20)
        Stop3D()
    EndIf
    
    FlipBuffers()
ForEver
ist nur eine abgespeckte version. In der Orginal version wurden noch andere Sprites und Sounds geladen. So dürfte es auf jedem PC verwendet werden, ohne gleich das ganze Packet laden zu müssen (1-2 MB)

Wenn ich mich noch korregieren darf, ich meinte nicht 128, 128, 128 als farbwert sondern den grünton 128 :oops:

Verfasst: 27.11.2004 14:48
von MVXA
hat es schon jemand getestet :| ?