Effekte programmieren - Problem

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Effekte programmieren - Problem

Beitrag von RSBasic »

Guten Tag ihr PB-User.
Ich habe ein Problem, denn ich möchte ein paar Effekten ausprobieren, aber leider kriege ich das nicht hin.
Mein Problem ist folgendes: Ich möchte, dass der Bildschirm z.B. von Dunkel nach Hell erleuchtet.
Mein Code:

Code: Alles auswählen

For a=0 To 255 
   ChangeGamma(a,a,a,0) 
Next
Ich habe diesen Code als Ergebnis gemacht, wenn man z.B. auf dem Button des Screens drückt.
Leider passiert nicht viel, wenn das Ergebnis aktiv wird (es wurde auf dem Button gedrückt), dann dauert ein paar Sekunden und mehr nicht, aber leider sehe ich keine Änderung des Bildschirms.
Was habe ich falsch gemacht, könnt ihr mir helfen?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Hast Du das exakt so gemacht wie hier im Code-Posting?

Dann ist es klar, warum es nicht funktioniert. Er ändert 256x den Gamma-Wert, aber Du zeichnest den Bildschirm ja gar nie neu, wie soll man das also dann sehen?

Stell Dir vor, Du nimmst Lego-Männchen und machst damit einen Film, indem Du lauter Einzelbilder fotografierst. Wenn Du jetzt die Männchen dauernd umstellst und bewegst, aber jedesmal vergißt, den Auslöser auf Deinem Fotoapparat zu drücken, dürfte daraus nix werden ;)

Und genauso ist es auch hier. Mein Tip wäre, eine Art Status-Variable für diesen Zweck einzuführen. Beispielsweise nennen wir das FadeOutCount.

Nun mußt Du wenn auf Deinen Button gedrückt wird, den FadeOutCount auf 255 setzen. Und in Deiner Hauptschleife, die ja jedesmal den Screen neu zeichnet und FlipBuffers() aufruft, machst Du folgendes:

Code: Alles auswählen

If FadeOutCount > 0
  ChangeGamma(FadeOutCount, FadeOutCount, FadeOutCount, 0)
  FadeOutCount -1
EndIf
Natürlich kannst Du das gleiche dann auch für ein FadeIn machen, hier mußt Du den Wert eben hochzählen.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

probier mal ob das bei dir geht. bei mir geht's z.b. nicht.
pb-hilfe hat geschrieben:Wenn dieser Befehl nichts tut, dann unterstützt die Hardware diese Funktion nicht (es wird keine Emulation angeboten, wegen der erforderlichen Tonnen von Operationen).

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"...")
ChangeGamma(0,0,0,1)
Repeat
  If up : g+1
    If g>255 : g=255:up=0 : EndIf
  Else : g-1
    If g<0 : g=0:up=1 : EndIf
  EndIf
  Debug g
  ChangeGamma(g,g,g,0)
  StartDrawing( ScreenOutput() )
    Circle(100,100,10,$00ff00)
  StopDrawing()
  FlipBuffers()
  ClearScreen($224466)
  ExamineKeyboard()
Until KeyboardReleased(#PB_Key_Escape)
Zuletzt geändert von #NULL am 22.12.2006 15:51, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@#NULL
Vielleicht mal die Hilfe genauer lesen?
Den erforderlichen einmaligen Aufruf mit dem Flag 1 sehe ich nicht.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

Ich habe dieses Problem gelöst und bin froh, dass ich endlich geschaft habe, jetzt habe ich ein anderes Problem.
Wenn ich z.B. der Bildschirm verdunkle, wie kann ich wieder zurück machen, alle die richtige Farbe. Mit den Farbwert 255 habe ich schon versucht, aber der zeigt dann ein weißer Bildschirm.
Welchen Wert soll ich angeben?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

oops, danke. hab's verbessert. jetzt klappt es auch bei mir :oops:
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Hier fehlt wohl noch eine Überprüfung durch den Compiler.

Denn ClearScreen und FlipBuffers sind wohl irgendwie von InitSprite abhängig. Und wenn man es aus Versehen vergisst, kommt keine Fehlermeldung beim Compilieren, aber das Programm selbst verursacht einen Fehler.

Aber wird wohl. Sind halt immer so kleine Fehler, die einem manchmal bei der Fehlersuche zum Verzweifeln bringen können. /:->
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Und wenn man es aus Versehen vergisst
liegt immer an der Badehose, siehe Signatur
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

was mich wundert ist, dass hier anscheinend keine möglichkeit vorgegeben ist, den referenzwert wieder herzustellen...

oder ist (0,0,0) der Referenzwert, und die gamma-änderung geht auch ins negative?

-----------------------
btw:

Code: Alles auswählen

  If up : g+1 
    If g>255 : g=255:up=0 : EndIf 
  Else : g-1 
    If g<0 : g=0:up=1 : EndIf 
  EndIf 
Algo boosted:

Code: Alles auswählen

;in init
up = 1
;in loop
g + up : If g = 0 Or g = 255 : up = -up : EndIf
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

hilfe lesen !
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten