In .exe Createtimer funktioniert nicht <<erledigt>

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Zwer99

Betreff: In .exe Createtimer funktioniert nicht <<erledigt>

BeitragDo, Nov 09, 2006 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Titel dieses Themas sagt eigentlich schon viel aus.

Ich hab eine .bb in eine .exe umgewandelt hab.
Alles schön und gut, alles hat funktioniert, aber die CreateTimer-Funktion funktioniert irgentwie nicht. Auf meinem alten Notebook geht das Spiel langsamer als auf meinem neuen PC.

Falls wichtig: Bei mir funktioniert CreateTimer nicht einmal im Vollbildmodus aber im fenstermodus schon.


P.S.: An alle die denken "Was für ein blöder Titel": Bekomm das "Erledigt" nicht in die Zeile. Very Happy
  • Zuletzt bearbeitet von Zwer99 am Di, Nov 14, 2006 20:14, insgesamt 2-mal bearbeitet

Schnittlauch

Unkraut

BeitragDo, Nov 09, 2006 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst Frameunabhängig programmieren damit das spiel auf allen
Rechner gleichschnell geht. Und du musst Programme kompilieren und sie nicht einfach zu ner EXE umbenennen Wink
Createttimer verlangsamt höchstens das Spiel.

MFG
Schnittlauch
Ich wars nicht.
 

timmeTheOnly

BeitragDo, Nov 09, 2006 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
1.) NEUEN nich neun
2.) Such mal nach "Frameunabhängigen Programmieren"...
3.) Im Fenstermodus übernimmt, im gegensatz zum Vollbild Windows die FPS

4.) MfG
5.) T-Master

JustTheBest

BeitragDo, Nov 09, 2006 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Sorry, ich weiß nich, wie weit du bist, aber wenn der Timer im Vollbildmodus nich leuft, dann geht er garnicht. Hast du dann in der Hauptschleife überhaupt waittimer(timer) Very Happy ? Nur so als Ansatz... wenn dus hast: sorry, dachte vielleicht kennst du dich damit noch nicht aus!
Also, wenns immernoch nicht klappt, zeig mal den Code!

mfg
JTB
www.mas-online.de.gg
__________

Liegt der Camper tot im Keller war der Rusher wieder schneller. Liegt der Rusher tot daneben hat der Camper nen Kollegen!
 

Zwer99

BeitragFr, Nov 10, 2006 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ich hab WaitTimer eingegeben.

Und hab den Code auch in eine .exe-Datei kompiliert.

Xaron

BeitragFr, Nov 10, 2006 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist wahrscheinlich, dass das Spiel auf Deinem alten Notebook zu langsam läuft, also langsamer, als mit CreateTimer eingestellt. Dann kann CreateTimer/Waittimer natürlich auch nix machen und das Spiel beschleunigen.

Gruß - Xaron
Cerberus X - Monkey X Reloaded!
 

Dreamora

BeitragFr, Nov 10, 2006 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Timer wird Geschwindigkeitsunterschiede zwischen langsamen und schnellen PCs nur noch verschlimmern, fürchte ich.
Denn dein Waittimer ist nicht 100% genau, das wäre jedoch nötig um zu verhindern, dass der Timer genau einen Moment zu spät feuert und dadurch der VSync sich um 16ms verlängert (bei einem Schirm mit 60hz)

Das Problem fällt beim schnellen System nicht auf, der wird den Timer vermutlich zeitgenau feuern können oder hat ausreichend "Frameressourcen" so das der VSync kein Problem ist.

Bei einem langsamen system sorgt diese Kombination jedoch für ganz herrliche Dia Show Effekte, weil sich die Timerverspätung durchgehend weiter ziehen wird, so das du im Endeffekt nur noch 50% der FPS hast, wenns übel läuft.


Wenn ein Spiel immer gleich schnell "laufen" (also aussehen vom spielgefühl) soll, dann musst du wie oben erwähnt frameunabhängige Programmierung nutzen. Dabei ist die Änderung pro Frame einfache von den Frames pro Sekunde abhängig. Dadurch hat man eine konstante Bewegung pro Sekunde (nicht pro Frame, was du aktuell vermutlich hast)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Zwer99

BeitragFr, Nov 10, 2006 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir das Tutorial "Frameunabhängig programmieren" durgelesen und so gemacht wie's dagestanden ist. Nur jetzt bewegen sich meine Bilder überhaupt nicht.

Ich hab StartZeit = Millisecs() ganz am Anfang der Schleife geschrieben.

Dazwischen einige Funktionen aufgerufen. Darunter eine Funktion, die die Bilder bewegen lässt. (Dabei 1 mit SchleifenZeit multipliziert )

am Schluss der Hauptschleife hab ich SchleifenZeit = Millisecs() - StartZeit geschrieben.

Natürlich werde ich die Namen der Variablen noch verändern.

Fuchsi

BeitragFr, Nov 10, 2006 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin Sevi,

Du musst alle Bewegungen mit "SchleifenZeit" multiplizieren.
zB.:
Code: [AUSKLAPPEN]

moveentity objekt,0,0,geschwindigkeit*SchleifenZeit


MfG

Hagbard

BeitragFr, Nov 10, 2006 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wie kontrolliert man, dass das Objekt sich nur eine bestimmte Zahl an Pixeln oä bewegt?

edit: ... stimmt, klar
  • Zuletzt bearbeitet von Hagbard am Fr, Nov 10, 2006 18:49, insgesamt einmal bearbeitet
 

Dreamora

BeitragFr, Nov 10, 2006 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls die Bewegungsdistanz grösser ist, als das von dir definierte Maximum, setze sie einfach auf das Maximum
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Zwer99

BeitragDi, Nov 14, 2006 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry Leute, aber ich hab einen ziemlich dummen Fehler gemacht.
Ich hab nämlich die Schleifenzeit in einer Funktion mit einem Wert multipliziert und hab aber vergessen die Schleifenzeit Global zu setzen. Embarassed Embarassed

Tut mir echt leid.

Ja, aber jetzt hab ich ja geschafft. Danke für die Tipps. Waren wirklich nützliche Sachen dabei Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group