DisplaySprite3D und OpenWindowScreen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

DisplaySprite3D und OpenWindowScreen

Beitrag 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 ?!
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: DisplaySprite3D und OpenWindowScreen

Beitrag 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.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

...dafür schonmal thx... :allright:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag 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... :(
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 »

Bei vielen ATI-Grafikkarten funktioniert nur schwarz als Transparente Farbe, vielleicht liegts daran...

KeyKon
(\/) (°,,,°) (\/)
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Quatsch.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag 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 !!!
keenhauberk
Beiträge: 8
Registriert: 14.03.2006 23:43

Beitrag 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).
keenhauberk
Beiträge: 8
Registriert: 14.03.2006 23:43

Beitrag von keenhauberk »

Aber vielleicht geht das hier auch? Gibt es DisplaySprite3D(1,28,28,128) ? Wenn ja hättest du eine 50%ige Transparenz.
Antworten