Seite 1 von 2
Effekte programmieren - Problem
Verfasst: 22.12.2006 13:36
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:
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?
Verfasst: 22.12.2006 13:51
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.
Verfasst: 22.12.2006 15:40
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)
Verfasst: 22.12.2006 15:48
von ts-soft
@#NULL
Vielleicht mal die Hilfe genauer lesen?
Den erforderlichen einmaligen Aufruf mit dem Flag 1 sehe ich nicht.
Verfasst: 22.12.2006 15:52
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?
Verfasst: 22.12.2006 15:53
von #NULL
oops, danke. hab's verbessert. jetzt klappt es auch bei mir

Verfasst: 22.12.2006 16:02
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.

Verfasst: 22.12.2006 16:04
von ts-soft
>> Und wenn man es aus Versehen vergisst
liegt immer an der Badehose, siehe Signatur
Verfasst: 22.12.2006 16:39
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
Verfasst: 22.12.2006 16:51
von bobobo
hilfe lesen !