Flip?

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Sereyanne

Betreff: Flip?

BeitragMi, März 25, 2009 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Bestimmt ne ganz leichte Frage für euch: Was bedeutet eine Zahl hinter Flip? Flip, Flip 0, Flip 1... was ist der Unterschied? Wann nehme ich was?
Ja, ich habe schon gesucht Wink flip 0 hat wohl was mit vsync zu tun und ich kann mehrere bilder auf einmal ausgeben und es ist schneller... oder wie?

Nicdel

BeitragMi, März 25, 2009 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Flip 1 (Flip = Flip 1) bedeutet, das die Spielgeschwindigkeit auf die Bildwiederholfrequenz des Monitors begrentzt ist. Bei Flip 0 gibt es diese Begrenzung nicht, manche Sachen werden dann aber durch die hohe Geschwindigkeit nicht gezeichnet ("Dropped Frames") Siehe auch Flip. Für Spiele ist Flip 0 in Verbindung mit Timer (CreateTimer, WaitTimer) am besten geeignet.

Mfg Nicdel
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Sereyanne

BeitragMi, März 25, 2009 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
achso das heißt flip ist das gleiche wie flip 1.
warum muss ich eigentlich in der hauptschleife repeat-flip-until und in der function nochmal anwenden? functions arbeiten wohl anders als include, oder?
wie verbinde ich flip mit nem timer?

Nicdel

BeitragMi, März 25, 2009 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
In der Function muss Flip nicht nochmal geschrieben werden.

EDIT:

Code: [AUSKLAPPEN]

Graphics 000,000,00,0

SetBuffer(BackBuffer())

timer = CreateTimer(60) ; 60 Bilder in der Sekunde

; Zeug laden, usw...

Repeat

WaitTimer(timer)

; Zeug malen, usw...

Flip
Cls
Until KeyHit(1)
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Sereyanne

BeitragMi, März 25, 2009 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
doch, bei mir schon
Code: [AUSKLAPPEN]
Repeat ;Hauptschleife
SetBuffer BackBuffer()
Cls

Startscreen()

Flip <<< da ist ein flip
Forever
End

Function Startscreen()
   Repeat
      DrawBlock Zion, 180, 20
      Color 255,255,0
      Text 230, 400, "Zionwarez"
      Flip <<<< da ist noch eins. ohne geht nicht
     Until keyhit (1)
   FlushKeys
End Function

The_Nici

BeitragMi, März 25, 2009 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast auch eine zweite Schleife bei Startscreen.
MfG

Nicdel

BeitragMi, März 25, 2009 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Klar, du hast in der Funktion ja nochmal eine Schleife.

Richtig:

Code: [AUSKLAPPEN]


SetBuffer BackBuffer()

FlushKeys

Repeat ;Hauptschleife
Cls

Startscreen()

Flip ;<<< da ist ein flip
Until KeyHit(1)
End

Function Startscreen()
      DrawBlock Zion, 180, 20
      Color 255,255,0
      Text 230, 400, "Zionwarez"
End Function
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, März 25, 2009 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann sich das ganze auch im folgendem Link genau durchlesen, warum man Flip 0 zusammen mit einem waitTimer durchführen sollte.

https://www.blitzforum.de/foru...hp?t=25242
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Sereyanne

BeitragMi, März 25, 2009 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
wie soll es denn ohne schleife gehen?
selbst mit nem delay (so auf die schnelle) wird das bild doch gar nicht angezeigt!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, März 25, 2009 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Du brauchst keine zweite Schleife innerhalb der Funktion Startscreen(), wenn diese Funktion bereits aus einer Schleife aufgerufen wird. Man sollte sich dann entscheiden wie man vorgeht, und wie struktuiert sein Programm sein soll. Doppeltes Flip ergibt, wenn überhaupt nur in den seltesten Fällen, keinen Sinn.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Sereyanne

BeitragMi, März 25, 2009 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
deswegen frag ich ja.. es kam mir so seltsam vor, so oft flip verwenden zu müssen, dachte mir, irgendwas machst du falsch...
aber was? Nicdel hat ja recht, so funktioniert es, aber im hauptprogramm nicht, obwohl ich keine großen veränderungen habe sehe ich das bild nicht...

ok ich probiere mal rum... irgendwas scheint wohl nicht zu stimmen bei mir.
der beitrag mit dem timer ist ja ganz schön. wird aber im beispiel mit while verbunden. ich will aber gar kein ereignis zuweisen, um die schleife beenden zu können! am liebsten: repeat - bis timer abgelaufen. und wie geht das?

Nicdel

BeitragMi, März 25, 2009 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du auch Graphics gemacht?
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Sereyanne

BeitragMi, März 25, 2009 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ja natürlich... krieg ich ohne überhaupt was zu sehen????????????

The_Nici

BeitragMi, März 25, 2009 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Jep.
Standard ist 400x300 Graphics Fenster mit Frontbuffer drinne.
Ohne Code kann man leider nichts machen!
MfG

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, März 25, 2009 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Je nachdem was du machen willst. Aber ich denke wie folgt sollten deine Bedürfnisse befriedigen:

Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer BackBuffer()

Global Timer=CreateTimer(60)


Startscreen()


Repeat
   Cls
   
   WaitTimer Timer
   Flip 0
Forever
End



Function Startscreen()
   
   Repeat
      Cls
      DrawBlock Zion, 180, 20
      Color 255,255,0
      Text 230, 400, "Zionwarez"
      
      WaitTimer Timer
      Flip 0
   Until KeyHit (1)
   
   FlushKeys
   
End Function
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Sereyanne

BeitragMi, März 25, 2009 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich kapiers echt nicht. Dieses teilstück meines codes, verändert von Nicdel, funktioniert an für sich ja.

Code: [AUSKLAPPEN]

SetBuffer BackBuffer()
FlushKeys
Repeat ;Hauptschleife
Cls
Startscreen()
Flip ;<<< da ist ein flip
Until KeyHit(1)
End

Function Startscreen()
      DrawBlock Zion, 180, 20
      Color 255,255,0
      Text 230, 400, "Zionwarez"
End Function

aber wie sieht es aus wenn 2 funktionen nacheinander durchgelaufen werden sollen?
Code: [AUSKLAPPEN]

Graphics 640,480,32,1
Global Zion = LoadImage ("gfx/Zion.bmp")
Global keiner=LoadImage ("gfx/keiner.bmp")
SetBuffer BackBuffer()
FlushKeys
Repeat ;Hauptschleife
Cls
Startscreen()
Startscreen2()
Flip ;<<< da ist ein flip
Until KeyHit(1)
End

Function Startscreen()
      DrawBlock Zion, 180, 20
      Color 255,255,0
      Text 230, 400, "Zionwarez"
End Function

Function Startscreen2()
      Cls
      DrawBlock keiner,0,0
      Text 120,400, "...also machen wir sie selbst!"
End Function

und schon seh ich nur noch das zweite bild, klar, ohne delay und timer u.ä.... aber wo gehört der timer hin?

Noobody

BeitragMi, März 25, 2009 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein Wunder, dass du nur das zweite Bild siehst, wenn du in der zweiten Funktion mit Cls den Bildschirm leerst.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Sereyanne

BeitragMi, März 25, 2009 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
aha, also ist es besser, wenn ich cls weg lasse, dann sehe ich beide bilder übereinander weil das erste nicht gelöscht wird... ok bei mir nimmt es ja eh den ganzen bildschirm ein aber sonst?

edit: cls weggelassen... zeigt das erste immer noch nicht an... wo bau ich delay/timer ein?

The_Nici

BeitragMi, März 25, 2009 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
ay. Grundlagen x(
Code: [AUSKLAPPEN]

;Grafikfenster Initialisieren
Graphics 800,600,32,2   ;Wir stellen das GRafikfenster auf die Auflösung 800x600, 32bit Farbtiefe und im Fenstermodus
SetBuffer BackBuffer()   ;Der BackBuffer wird gesetzt. Beachte: Der Buffer wird AUSSERHALB DER SCHLEIFE gesetzt!

;Laden undso
frametimer = CreateTimer(60)   ;Erstellt einen Timer der die Frameanzahl auf 60 Bilder pro Sekunde regelt.

;Jetzt kommt sie, die allmächtige
;---MAINLOOP---
Repeat
   ;Zeichnen
   Flip 0   ;Flip 0 stellt das VSync aus und sollte immer so verwendet werden wenn WaitTimer benutzt wird!
   Cls
   WaitTimer(frametimer)   ;Hier wird abgefragt ob schon eine Sechzigstel-Sekunde seit dem letzten WaitTimer vergangen ist. Wenn nicht wird gewartet.
Forever
End

MfG

Xeres

Moderator

BeitragMi, März 25, 2009 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Welche Maße haben denn deine Bilder? Drawblock zeichnet ohne Transparenz, also wird das zweite Bild das erste u.U. komplett übermalen...
Timer & Flip(0) so wie in Hectics Beispiel.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group