?? % transparente bitmaps

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

?? % transparente bitmaps

Beitrag von Green Snake »

hallo

also ich habe ein bmp in den openscreen geladen
und jetzt möchte ich, dass das bild....
sagen wir mal zu 50 % transparent ist
wie soll ich das anstellen?

hoffe ihr wisst das
-.-"
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

sowas geht mit DisplayTranslucideSprite()

lies dir die PB-Hilfe dazu mal durch, und probier ein bisschen rum... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Danke

Beitrag von Green Snake »

Hallo

vielen dank

aber weisst du auch , wie man macht, das zb ein 10 sekunden die transparenz von 0 auf 255 hochgeht ? (blending heisst das glaubich)

ich hoffe du weisst das auch

und nochmals danke für deine hilfe von vorhin
-.-"
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Code: Alles auswählen

For i = 0 To 255
  Delay(Int(10/255))
  DisplayTranslucideSprite(#Sprite, X, Y, i)
Next
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

bloß nix mit Delay() das bremst dich nur aus!!

dafür gibt es doch timer, aber damit kenne ich mich nicht so aus. vielleicht kann jemand ein beispiel posten??

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

@nco2k: Das war doch nur ein Beispiel. Alternativ könnte man zum Beispiel auch mit ElapsedMilliseconds() arbeiten oder mit irgendeiner Timer-Lib die Internet rumschwirrt.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nco2k hat geschrieben:bloß nix mit Delay() das bremst dich nur aus!!
das hab ich früher auch gedacht, aber das stimmt garnicht...

- CPU-Auslastung
schon ein Delay(1) kann wunder wirken, die CPU rödelt nicht mehr wie blöde,
und auf die eine millisekunden kommt es kaum an:
bei einer gewünschten Framarate von 60 darf jeder
hauptschleifendurchlauf 16.666666 millisekunden dauern,
und wenn du nicht in 15ms fertig wirst, dann nimm eh lieber 30FPS.

> Alternativ könnte man zum Beispiel auch mit ElapsedMilliseconds() arbeiten
isn bisschen ungenau. aber geht auch.

trotzdem ist

Code: Alles auswählen

Delay(Int(10/255)) 
ein denkfehler:
es muss 10000/255 heissen.

ausserdem dürfte Green Snake von dem Code keinen effekt sehen,
und sich wundern warum:
du hast ihn nicht drauf ningewiesen, das das flipbuffers() mit in der schleife sein muss :wink:

@Green Snake

folgendes Codestückchen ist nur die Hauptschleife,
du musst vorher noch ein paar befehle durchführen,
die lasse ich dich selbst machen :wink:

ausserdem musst du natürlich Spritenummer und Position im Display-Befehl anpassen.

Code: Alles auswählen

SetFrameRate(60)
Repeat

    ExamineKeyboard()
    ClearScreen(0,0,0)
    
    j+1
    If j > 2
        j = 0
        If i<255
            i+1
        EndIf
    EndIf
    
    DisplayTranslucideSprite(0,0,0,i)
    
    FlipBuffers()
    Delay(10)

Until KeyboardPushed(#PB_Key_Escape)
erklärung:

mit SetFrameRate() syncronisieren wir die schleife auf 60FPS.
dieser Befehl ist bei manchen Programmierern sehr unbeliebt,
da dann der FlipBuffers()-befehl auf das ende der Phase wartet,
und dabei die CPU auf Vollast fährt.
um das zu vermeiden, bauen wir ein Delay(10) ein (10 ms warten),
wenn in einer schleife mehr getan werden muss, muss man ggf.
die anzahl ms verringern.

ClearScreen() und FlipBuffers() brauchen wir in jeder schleife, die grafik
auf einem DX-Screen darstellen soll.

die variablen j und i leisten folgendes:
j zähl jeden Frame hoch, bis 2, dann wird es wieder 0,
und i wird hochgezählt, wenn es noch unter 255 ist,
es steigt also alle 3 Frames um 1 an, bis 255, dann nicht weiter.
i wird im DisplayTranslucideSprite() als transparenz-wert benutzt,
damit dauert das einblenden insgesamt 12.75sec

die schleife kann durch drücken von ESC beendet werden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Code: Alles auswählen

lngTime = ElapsedMilliseconds()
Repeat

   ExamineKeyboard()
   ClearScreen(0,0,0)

   If ElapsedMilliseconds() - lngTime > 10 ;Musst mit der Zeit ein bisschen rumspielen
      If i<255
         i+1
      EndIf
      lngTime = ElapsedMilliseconds()
   EndIf

   DisplayTranslucideSprite(0,0,0,i) 
    
   FlipBuffers() 

Until KeyboardPushed(#PB_Key_Escape)
So würd ich es machen (k.A. ob das geht, habs im Browser gecodet...)
Antworten