Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Doublebuffering??

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 12.06.2005, 17:47    Titel: Doublebuffering?? Antworten mit Zitat

Hallo. Ich habe gerade begonnen, ein neues Programm in FB zu schreiben. Das ist der Code:

Code:

screen 9,,0,1
CLS
e=0
do
    screen 9,,1-seite,seite
    seite=1-seite
    if Inkey$=CHR$(27) then e=1
    loop until e=1


Aber wenn ich ihn starte, starten sich auf meinem Computer immer unterschiedlich große DOS Fenster, und am schluss muss ich ihn neu starten um da raus zu kommen. Was ist in dem Code falsch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 12.06.2005, 17:52    Titel: Antworten mit Zitat

Zu deinem Code: LOL, sorry, aber soviele Screen-Anweisungen in einer Schleife sind einfach nicht gesund! zwinkern

Code:
screen 9,,1,1
SCREENSET 1, 0
CLS
e=0
do
    SCREENCOPY
    [Zeichenkram...]
    if Inkey$=CHR$(27) then e=1
    loop until e=1

_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 12.06.2005, 17:59    Titel: Antworten mit Zitat

Danke. Hab das jetzt so:

Code:

screen 9,16,2,&H1   
e=0
do
    SCREENCOPY
    GETMOUSE x, y,, buttons
    if Inkey$=CHR$(27) then e=1
    loop until e=1


2 Fragen habei ich dazu:

1. Wie stelle ich dann eine BMP Grafik auf dem Bildschirm dar?
2. Was bringt "SCREENCOPY"?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 12.06.2005, 18:17    Titel: Antworten mit Zitat

Wenn du nicht weißt, was ein Befehl bewirkt, benutze doch die Befehlsreferenz-Suche lächeln

Und schon findet sich die Antwort zwinkern

Übrigens sind in den Buchstabenauflistungen die unbekannten Befehle jetzt kursiv geschrieben - ich habe die Ref. heute geupdatet..

Ach: und bei Screencopy solltest du schon die FromPage- und ToPage-Parameter angeben!

Eine Bitmap zeigst du an mit
Code:
DIM image(Dateigroesse) AS UBYTE
 BLOAD "image.bmp", VARPTR(image(0))
 PUT (0,0), image,PSET

Grüßle,
Mecki
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 12.06.2005, 19:03    Titel: Antworten mit Zitat

Für QB habe ich bekanntlich meinen Artikel

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/ButterweicheAnimationen.html

geschrieben. Wie weit sich die dortigen Beispiele auf FreeBasic portieren lassen/kompatibel sind, kann ich jedoch nicht beurteilen. Es wäre daher gut, wenn sie sonst jemand einmal testet.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 12.06.2005, 19:46    Titel: Antworten mit Zitat

Bleibt noch anzumerken, dass BLOAD nur bei 256-Farben-Bitmaps funktioniert, die außerdem nicht zu groß sein sollten.

Für 24-Bit-BMPs habe ich mal diese Routinen geschrieben:
(Du wirst sicher schnellere und bessere finden; aber für den Anfang bringen sie schon was zwinkern )
Code:
declare sub ShowBMP (FileName AS STRING, xs as integer, ys as integer)
declare sub SwBMPPt (FileName as string, xs as integer, ys as integer, x1 as integer = 0, y1 as integer = 0, x2 as integer = -1, y2 as integer = -1)

screen 19, 24, ,1

paint (0, 0), &HFFFFFF
line (09, 09)-(50, 50), &H00FF, bf
line (10, 10)-(49, 49), &HFF00, bf
ShowBMP "gfx\Scrn_GameOver.bmp", 0, 0
'SwBMPPt "gfx\A00_Block00.bmp", 10, 10
getkey


Sub ShowBmp (FileName as string, xs as integer, ys as integer)
   dim f as ubyte
   f = freefile
   
   dim xSize as integer
   dim ySize as integer
   dim zSize as integer
   dim yBufS as integer
   
   dim Zeile as string
   dim Pixel(2) as ubyte
   dim pcolr as integer
   
   open FileName for binary as #f
      get #f, 19, xSize
      Get #f, 23, ySize
     
      zSize = (xSize * 3)
      yBufS = 4 - (zSize mod 4)
      if yBufS = 4 then yBufS = 0
      zSize = zSize + yBufS
     
      Zeile = string$(zSize, 0)
      get #f, 55 + (y * zSize), Zeile
     
      for y = 1 to ySize
         for x = 1 to (xSize * 3) step 3
           
            Pixel(0) = asc(Zeile, x    )
            Pixel(1) = asc(Zeile, x + 1)
            Pixel(2) = asc(Zeile, x + 2)
         
            pcolr = rgb(Pixel(2), Pixel(1), Pixel(0))
            Pset (xs + x \ 3, ys + (ySize - y)), pcolr
         next
         
         get #f, 55 + (y * zSize), Zeile
         
      next
   close #f
end sub

sub SwBMPPt (FileName as string, xs as integer, ys as integer, x1 as integer = 0, y1 as integer = 0, x2 as integer = -1, y2 as integer = -1)
   dim f as ubyte
   f = freefile
   
   dim xSize as integer
   dim ySize as integer
   dim zSize as integer
   dim yBufS as integer
   
   dim Zeile as string
   dim Pixel(2) as ubyte
   dim pcolr as integer

   if (x2 < x1) and (x2 > 0) then swap x1, x2
   if (y2 < y1) and (y2 > 0) then swap y1, y2

   open FileName for binary as #f
      get #f, 19, xSize
      Get #f, 23, ySize
     
      if x2 < 0 then x2 = xSize
      if y2 < 0 then y2 = ySize
     
      zSize = (xSize * 3)
      yBufS = 4 - (zSize mod 4)
      if yBufS = 4 then yBufS = 0
      zSize = zSize + yBufS
     
      Zeile = string$(zSize, 0)
      get #f, 55 + (y * zSize), Zeile
     
      for y = 1 to ySize
         for x = (x1 * 3) + 1 to (x2 * 3) step 3
           
            if (y >= y1) and (y <= y2) then
               Pixel(0) = asc(Zeile, x    )
               Pixel(1) = asc(Zeile, x + 1)
               Pixel(2) = asc(Zeile, x + 2)
               pcolr = rgb(Pixel(2), Pixel(1), Pixel(0))
               Pset (xs + x \ 3, ys + (ySize - y)), pcolr
            end if
           
         next
         
         get #f, 55 + (y * zSize), Zeile
         
      next
   close #f
end sub

_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz