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:

end und fbgfx.bi klappt nicht richtig

 
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
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 28.08.2008, 09:19    Titel: end und fbgfx.bi klappt nicht richtig Antworten mit Zitat

Code:
screen 20, 32, ,0
WINDOWTITLE "alpha"
setmouse ,,0
randomize timer
dim as any ptr player, map
DIM as integer xmap, ymap, frames, fps
dim as single startfps, endefps
map = imagecreate (613,560)
player = imagecreate (14,14)
bload "player.bmp", player
bload "map.bmp", map
xmap =0
ymap=0
sleep 1
startfps = timer
do
    screenlock
    cls
    frames = frames + 1
    if endefps-startfps > 1 then
        fps=frames
        frames = 0
        startfps = timer
    end if
        'cls
    put (xmap,ymap),map,pset
    put (500,350),player,pset
    print fps
    print frames
    if multikey(&h48) then ymap = ymap + 1 'oben
    if multikey(&h4B) then xmap = xmap + 1 'links
    if multikey(&h4D) then xmap = xmap - 1 'rechts
    if multikey(&h50) then ymap = ymap - 1 'unten
    if multikey(&h01) then end
    screenunlock
    sleep 1
    endefps=timer
loop

Dass die fbgfx.bi nicht richtig klappt ist ja nicht so schlimm, weil man das ja mit den scancodes auch machen kann. Aber dass das Programm so langsam läuft und sich bei end immer aufhängt (Windows: "Programm reagiert nicht") ist schon doof. Ja, die fbgfx.bi ist vorhanden. Jetzt habe ich mal die Aktuelle Version des Compilers installiert (0.20b) doch jetzt klappt gar nichts mehr ("...exe funktioniert nicht mehr")
weinen


edit: Mir ist jetzt aufgefallen dass es am screen befehl liegt
wenn ich folgendes "Programm" ausführen will kommt der Fehler:
Code:
screen 19,16,,0
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 28.08.2008, 11:49    Titel: Antworten mit Zitat

Der Fehelr bei "End" kommt, weil du "End" vor "ScreenUnLock" ausführst. "ScreenUnLock: End" wäre da angebracht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 28.08.2008, 14:10    Titel: Antworten mit Zitat

Da wäre also schonmal 1 fehler geklährt, aber warum geht das nicht mit "screen" und was ist mit der "fbgfx.bi"? Ich habe gestern als ich noch die ältere version von FB installiert hatt auch mal ausprobiert ob meine anderen Programm noch klappen wenn ich sie neu compilliere, doch dort klappt die fbgfx.bi auch nicht mehr, weder mit dem neuen compiler noch mit dem alten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 28.08.2008, 16:21    Titel: Antworten mit Zitat

??
Code:
#Include "fbgfx.bi"
SCREEN 20, 32, ,0
WINDOWTITLE "ALPHA"
SETMOUSE ,,0
randomize TIMER
DIM AS ANY PTR player, map
DIM AS INTEGER xmap, ymap, frames, fps
DIM AS SINGLE startfps, endefps
map = IMAGECREATE (613,560,&Hff0ff000)
player = IMAGECREATE (14,14,&Hff000ff0)
'BLOAD "player.bmp", player
'BLOAD "map.bmp", map
xmap = 0
ymap = 0
startfps = TIMER
DO
    frames = frames + 1
    IF endefps-startfps > 1 THEN
        fps=frames
        frames = 0
        startfps = TIMER
    END IF
    SCREENLOCK
    CLS
    PUT (xmap,ymap),map,PSET
    PUT (500,350),player,PSET
    PRINT fps
    PRINT frames
    SCREENUNLOCK
    IF MULTIKEY(FB.SC_UP) THEN ymap = ymap - 1 'oben
    IF MULTIKEY(FB.SC_LEFT) THEN xmap = xmap - 1 'links
    IF MULTIKEY(FB.SC_RIGHT) THEN xmap = xmap + 1 'rechts
    IF MULTIKEY(FB.SC_DOWN) THEN ymap = ymap + 1 'unten
    IF MULTIKEY(FB.SC_ESCAPE) THEN END
    SLEEP 1
    endefps=TIMER
LOOP
ohne Probleme unter FB0.20.0b mit -s gui kompiliert !
Kann es sein, dass deine Bilder größer als die dimensionierten Images sind?
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 28.08.2008, 16:56    Titel: Antworten mit Zitat

Nein, alles richtig, es hat ja auch früher bei älteren Programmen geklappt, ich werde das mal auf einem anderen Rechner ausprobieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 28.08.2008, 17:01    Titel: Antworten mit Zitat

Auf dem anderen rechner klappt alles normal.

Warum läuft das nur mit 65 fps auf einem rechner mit 2x 2,4 Ghz? Ist das Normal?

edit: sonst laufen solche programme immer schneller und wenn ich an 3d-spiele denke dann laufen die nicht viel langsamer(ich weiß dass es ein schlechter vergleich ist).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
raph ael



Anmeldungsdatum: 12.04.2006
Beiträge: 472

BeitragVerfasst am: 28.08.2008, 22:05    Titel: Antworten mit Zitat

65 fps? Klingt irgendwie normal... Das menschliche Auge erfasst sowieso nur 24 happy .
Und die meisten Monitore zeigen auch um die 60 fps an.
_________________
Zitat:
1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 29.08.2008, 13:02    Titel: Antworten mit Zitat

so ein einfacher sourcecode müsste trotzdem ein paar hundert fps generieren.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 29.08.2008, 14:31    Titel: Antworten mit Zitat

Jojo hat Folgendes geschrieben:
so ein einfacher sourcecode müsste trotzdem ein paar hundert fps generieren.

Mein ich ja verwundert

Ist da irgendwas falsch gemacht? Wie schnell ist das denn wenn ihr das compilliert? Kann das mal jemand ausprobieren?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 29.08.2008, 15:53    Titel: Antworten mit Zitat

258 FPS.
Zitat:
SLEEP 1


Und da wundert ihr euch noch peinlich

Ausserdem ist die FPS Berechnungsformel falsch, richtig ist:
Code:
FPS = 1/(Endzeit - Startzeit)


Weiterhin ist Print in der Konsole genauso wie im grafischen Modus laaaaahm...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 29.08.2008, 18:32    Titel: Antworten mit Zitat

ich weiß nicht, wie du auf den code kommst, csde, aber er scheint mir falsch zu sein.

der quellcode weiteroben scheint jedoch logisch:
1) Zähle bei jedem Schleifendurchlauf die Zählvariable eins nach oben
2) nach einer sekunde, gib den wert an und setze wieder auf 0.
damit wird beschrieben, wie viele Frames pro Sekunde gezeichnet wurden.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 29.08.2008, 18:50    Titel: Antworten mit Zitat

Code:
FPS = 1/(Endzeit - Startzeit)

ist im Prinzip schon richtig, setzt aber
1) eine möglichst gleichmäßige Framedauer
2) eine ausreichende Genauigkeit für Startzeit und Endzeit
voraus. Mag sein, dass beides gegeben ist, aber die Zählvariante halte ich auf jeden Fall für sicherer.

Ich könnte mir vorstellen, dass die Berechnung in jeden Frame die Geschwindigkeit mehr drosseln würde als die verwendete Variante mit dem Zählen - nur die PRINT-Ausgabe sollte nur einmal in der Sekunde gemacht werden und nicht in jedem Frame.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 29.08.2008, 19:51    Titel: Antworten mit Zitat

Weder SLEEP 1 noch das PRINT drücken die FPS wesentlich.
Code:
    CLS
    PUT (xmap,ymap),map,PSET
Diese beiden Zeilen brauchen am meisten Zeit. Da werden ca 4,3MB vom Prozessor zur Graka (bzw. Anzeigespeicher) geschaufelt.
REM die mal aus und FPS schnellt hoch.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 31.08.2008, 19:16    Titel: Antworten mit Zitat

28398 hat Folgendes geschrieben:
258 FPS.
Zitat:
SLEEP 1


Und da wundert ihr euch noch peinlich

Ausserdem ist die FPS Berechnungsformel falsch, richtig ist:
Code:
FPS = 1/(Endzeit - Startzeit)


Weiterhin ist Print in der Konsole genauso wie im grafischen Modus laaaaahm...


Das mit dem sleep ist mir mittlerweile auch kalrgeworden, jetzt habe ich ca. 260 fps.

Und die berechnungsformel die nennst ist halt ziemlich rechenaufwendig. Bei meinem ersten Versuch ein Spiel oder zumindest was ähnliches zu ersxchaffen habe ich das auch zuerst so gemacht. Aber das mit dem zählen der Frames bis eine Sekunde vergangen ist ist besser.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 31.08.2008, 20:28    Titel: Antworten mit Zitat

Komisch, alle namhaften Spiele, die die FPS anzeigen können machen das so: Oblivion, Source-Engine (Half-Life 2, EP1, EP2, DM, CS:S, TF2, Portal), Goldsource-Engine (Half-Life 1, CS 1.6, TF, usw. usf.), Crysis, Quake III A (openArena) etc.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 01.09.2008, 16:10    Titel: Antworten mit Zitat

28398 hat Folgendes geschrieben:
Komisch, alle namhaften Spiele, die die FPS anzeigen können machen das so: Oblivion, Source-Engine (Half-Life 2, EP1, EP2, DM, CS:S, TF2, Portal), Goldsource-Engine (Half-Life 1, CS 1.6, TF, usw. usf.), Crysis, Quake III A (openArena) etc.

Vielleicht zählen diese Programme immer nur eine halbe Sekunde und verdoppeln den getählten Wert, aber woher willst du das wissen dass die das mit einer "Formel" errechnen?
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