Wie kann ich einen Sprite ein und wieder ausblenden lassen ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Funktioniert einwandfrei, deine Augen sind höchstens zu langsam...

>Hast du ein kurzes Stück Coding, mit dem du dein Problem darstellen kannst ?
Hättest du dein Codeschnipselchen mal ausgeführt *haha* hättest du gemerkt das dein Codeschnipselchen ganz andere Fehler verursacht...

Ergo wenn man Hilfe will sollte man auch dafür sorgen das Helfer auch helfen können, ich (und viele andere) hab nämlich normalerweise keine Lust extra noch ne Testumgebung für anderer leutz Probleme zu schaffen...
Benutzeravatar
Fusselohr
Beiträge: 236
Registriert: 02.04.2007 10:43
Kontaktdaten:

Beitrag von Fusselohr »

Code: Alles auswählen

InitSprite()

UsePNGImageDecoder()

X.w

OpenScreen(1024,768,32,"Test")
LoadSprite(0,"Pik.png")

If X < 254
Repeat
DisplayTranslucentSprite(0, 0, 0, X)
X+1
FlipBuffers()
Until X = 255
EndIf

Wenn ich jetzt z.B. mit Alt und F4 beende tritt das Problem auf und die Windows Taste funzt dann auch nicht.

PS: Meintest du das mit dem Code so ?
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Eigentlich eher so:

Code: Alles auswählen

InitSprite()

X = 0

OpenScreen(1024,768,32,"Test")
LoadSprite(0,#PB_Compiler_Home + "\Examples\Sources\Data\Geebee2.bmp")

If X < 254
  Repeat
    DisplayTranslucentSprite(0, 0, 0, X)
    X+1
    FlipBuffers()
    Delay(250)
  Until X = 255
EndIf
Den Source kann jeder (zumindest WIN-User) direkt in PB ausführen da jeder die Grafik Geebee2.bmp mit der Installation von PB an der angegebenen Stelle hat ;)

UNd wie gesagt bei mir tritt da kein Fehler auf, egal ob ALT+TAB, ALT+F4 oder Windoof-Taste funktioniert einwandfrei und wird alles korekt dargestellt...
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Der Code funktioniert... das ganze ist nur furchtbar entsetzlich langsam, weil du die Softwarevariante von TransparentSprite im Truecolormodus nutzt.
Dazu muss jeder Pixel des Sprites einmal langsam aus dem Videospeicher gelesen werden, dann verarbeitet und dann wieder in den GRafikspeicher geschrieben.
Dazu dann noch das dicke Delay.

Wenn du mit Transparenz arbeiten willst dann nimm unbedingt Sprite3D und überlas diese Dinge der Grafikkarte. Dann ist das ganze auch schnell genug.

Code: Alles auswählen

InitSprite()
InitKeyboard()


OpenScreen(1024,768,32,"Test")
LoadSprite(0,#PB_Compiler_Home+"\Examples\Sources\Data\Geebee2.bmp")

X = 0

Repeat
    DisplayTranslucentSprite(0, 0, 0, X)
    If X<255
      X+1
    EndIf
    
    FlipBuffers()
    ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

>Dazu dann noch das dicke Delay.
Das Delay ist von mir (nit von Fussel) um das "transparent werden" sichtbar zu machen, ich hab einfach mal angenommen das es sonst kein normaler Mensch wahrnehemen kann da ne Repeatschleife mit dem hier genutzten Aufbau ja NUR 3.298.076 Durchläufe pro Sekunde macht (auf meinem Laptop mit 1,6GHz...)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Wenn du mit Transparenz arbeiten willst dann nimm unbedingt Sprite3D ...
Nicht wirklich. Der Punkt ist das er den Befehl einfach in einen Start-/StopSpecialFX() Block packen muss und dann lübt dat.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Fluid Byte hat geschrieben:Der Punkt ist das er den Befehl einfach in einen Start-/StopSpecialFX() Block packen muss und dann lübt dat.
...hatte ich nicht schon zuvor zum lesen der Hilfe geraten...? ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Stimme ich voll zu, macht nur keiner. Bild
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Fusselohr
Beiträge: 236
Registriert: 02.04.2007 10:43
Kontaktdaten:

Beitrag von Fusselohr »

Also hab ich das jetzt richtig verstanden ... Mein Code funktioniert, es treten keine Fehler auf aber er ist etwas zu langsam...
Oder ?

PS: Ich hab mal ein video gemacht, dass mein Problem teilweise darstellt ^^. An der Stell wo man das Flugzeug sieht, blinkt der Bildschirm (Das Prog war zu langsam ^^.) Hier ist der Link : http://rpgfire.lunaticgames.org/e107_fi ... roblem.rar
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Das Video ist überflüssig. Guckst du hier:

Code: Alles auswählen

InitSprite() : InitKeyboard()

OpenWindow(0,0,0,640,480,"void",#WS_SYSMENU | #WS_CAPTION | 1)

OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)

CreateSprite(0,300,300,#PB_Sprite_Memory)
StartDrawing(SpriteOutput(0))
For i=0 To 299
	Box(0,i,300,1,RGB(255,i*255/299,0))
Next
StopDrawing()

SetFrameRate(60)

Repeat
	EventID = WindowEvent()
			
	ExamineKeyboard()
	
	If tval = 255 : tmode = 1 : EndIf
	If tval = 0 : tmode = 0 : EndIf
	
	If tmode : tval - 1 : Else : tval + 1 :EndIf	
	
	StartSpecialFX()
	ClearScreen(0)
	DisplayTranslucentSprite(0,100,100,tval)	
	StopSpecialFX()
	
	FlipBuffers()
Until KeyboardPushed(1) Or EventID = 16
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten