Seite 1 von 3

DisplaySprite3D und OpenWindowScreen

Verfasst: 14.03.2006 10:47
von Ghosty1967
Hallo Cracks...

Ich möchte gerne in einen WindowedScreen eine Analoguhr darstellen, deren Zeiger ich mittels 'RotateSprite' darstelle.
Wenn ich nun für ein Sprite den Befehl 'TransparentSpriteColor' benutze, wird das Sprite nicht im Screen angezeigt. Lasse ich den Befehl weg, funktioniert alles, nur das Sprite ist eben nicht "transparent" "!
Aber warum ist das so und wie setzte ich den Befehl richtig ein?
Mein Code sieht folgendermaßen aus:

Code: Alles auswählen

Declare DrawClock()

InitSprite()
InitSprite3D()


If OpenWindow(0,0,0,120,250,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"ZINA")
  If OpenWindowedScreen(WindowID(),0,0,120,120,0,0,0)
    ;============================================
    ;Lasse ich diesen Befehl weg, wird das Sprite dargestellt.
    TransparentSpriteColor(-1, 255, 255, 255)
    ;============================================
    LoadSprite(1, "GFX\Uhr120x120.bmp", #PB_Sprite_Texture) ;Hintergrundgrafik der Uhr
    LoadSprite(2, "GFX\Sek64x64.bmp"  , #PB_Sprite_Texture) ;der Sekundenzeiger
    LoadSprite(3, "GFX\Min64x64.bmp"  , #PB_Sprite_Texture) ;der Minutenzeiger
    LoadSprite(4, "GFX\Hrs64x64.bmp"  , #PB_Sprite_Texture) ;der Stundenzeiger
    CreateSprite3D(1, 2)
    CreateSprite3D(2, 3)
    CreateSprite3D(3, 4)
    Sprite3DQuality(1)
  EndIf  
EndIf

StartTimer(0,1000,@DrawClock())
Repeat
  EventID=WaitWindowEvent()
Until EventID=#PB_Event_CloseWindow

Procedure DrawClock()
  ;Errechnen der Zeigerwinkel
  s=-90+Int(Second(Date())*6)
  m=-90+Int(Minute(Date())*6);+(s*0.01)
  h=-90+Int(Hour(Date())*30) ;+(m*0.08)

  ;Hintergrund zeichnen
  ClearScreen(255,255,255)
  DisplaySprite(1,0,0)

  ;Sekundenzeiger darstellen und rotieren
  Start3D()
  DisplaySprite3D(1,28,28):  RotateSprite3D(1,s,0)
  Stop3D()
  FlipBuffers()
EndProcedure 


; jaPBe Version=2.5.4.22
; Build=0
; FirstLine=0
; CursorPosition=8
; ExecutableFormat=Windows
; DontSaveDeclare
; EOF
p.s. Noch eine Frage... Kann man das deklarieren der Prozeduren irgendwie in jaPBe ausschalten ?!

Re: DisplaySprite3D und OpenWindowScreen

Verfasst: 14.03.2006 11:25
von edel
Ghosty1967 hat geschrieben:p.s. Noch eine Frage... Kann man das deklarieren der Prozeduren irgendwie in jaPBe ausschalten ?!
Ja , unter Projekt -> Projekt Einstellungen . Unten findest du
"Erzeuge Declare-Dateien" .
Unter den normalen Einstellungen kannst du die Dateien auch
verstecken.

Verfasst: 14.03.2006 11:42
von Ghosty1967
...dafür schonmal thx... :allright:

Verfasst: 14.03.2006 11:48
von Kaeru Gaman
vielleicht ist deine Grafikkarte bei Transparenz eingeschränkter?

btw. du schreibst "das Sprite wird nicht dargestellt"
Welches? du benutzt deren vier.

was mir auf den ersten Blick auffällt: deine Uhr selber ist 120x120 (lt. namensbezeichnung)
das ist nicht die Std.-Größe für Sprite 3D.
Probier mal, die in 128x128 zu machen.

...aber obs damit besser geht, kann ich nicht versprechen..

aber ich hatte mal ein ähnliches problem...
non-standard-größen konnte er nur ohne transparenz darstellen...

Verfasst: 14.03.2006 12:32
von Ghosty1967
Also, stimmt schon... die Uhr ist 120x120px groß, aber die rotierenden Sprites sind alle durchweg 64x64px 24bit (auch wenn sie anders heißen).
Ich habs außerdem auf 3 verschiedenen Rechnern probiert... :(

Verfasst: 14.03.2006 15:39
von KeyKon
Bei vielen ATI-Grafikkarten funktioniert nur schwarz als Transparente Farbe, vielleicht liegts daran...

KeyKon

Verfasst: 14.03.2006 19:13
von Zaphod
Quatsch.

Verfasst: 15.03.2006 07:57
von Ghosty1967
Also Leutz...

Es liegt wirklich an der GK... aufm Laptop funktioniert seltsamerweise alles und bei dem Rechner, auf dem ich Progge (mit ner älteren AGP-Karte "3D Prophet 4500") nicht.

Weiss jemand, woran das liegt... Speicher, DirectX oder was sonst ?!

p.s. Also, das es an der "Transparenzfarbe" liegen könnte, kann ich mir rein technisch, logisch wirklich nicht vorstellen !!!

Verfasst: 15.03.2006 08:49
von keenhauberk
Zumal bei der Transparenz der Alphakanal (RGBA-Farbe) verwendet wird und den gibt es bei jeder Farbe (Hintergrundinfo die nur bei Java eine Rolle spielt, weil man es da manuell machen muss).

Verfasst: 15.03.2006 08:51
von keenhauberk
Aber vielleicht geht das hier auch? Gibt es DisplaySprite3D(1,28,28,128) ? Wenn ja hättest du eine 50%ige Transparenz.