Seite 1 von 2

PC Interpretiert zu schnell!

Verfasst: 14.11.2006 22:03
von D4uS1
Ich hab da son Problem. Ich hab nur n DirectX Patch installiert und schon fängt mein PC an die PB Progs falsch zu interpretieren. Es läuft jetzt alles viel zu schnell. Kann man irgentnen code machen damit der das an jedem Rechner gleich interpretiert?

Verfasst: 14.11.2006 22:10
von vonTurnundTaxis
Am besten arbeitest du zeitgesteuert.
Alternativ kannst du aber auch einfach SetFrameRate() verwenden.

Verfasst: 14.11.2006 22:40
von AND51
Ich habe mal was von Forum-Threads bzw. Tutorials was gejört, die hießen ungefähr so: "Wie man erreicht, dass Spiele immer gleich schnell laufen".

Such doch mal danach, ansonsten rate ich dir, mit Delay() zu arbeiten oder mit ElapsedMilliseconds() sozusagen zu überprüfen, ob / wie viel Zeit verstrichen ist.

Statt dem PB-Befehl solltest du lieber QueryPerformanceCounter_() & Co. nehmen, das ist dasselbe wie ElapsedMilliseconds(), nur kann das noch genauer messen (weil dazu richtige Hardware benutzt wird, sofern vorhanden).

Verfasst: 14.11.2006 23:37
von vonTurnundTaxis
> Statt dem PB-Befehl solltest du lieber QueryPerformanceCounter_() & Co. nehmen, das ist dasselbe wie ElapsedMilliseconds()
Nein, das sollte man nicht, weil dadurch ein wichtiges Feature von PureBasic, die Plattformunabhängigkeit, verloren geht.

Verfasst: 15.11.2006 08:04
von #NULL
..außerdem, wenn es dasselbe ist, warum sollte man es dann bevorzugen?

zum timing:

Code: Alles auswählen

wait=500

Repeat
  ;...
  ms=ElapsedMilliseconds()
  ;...
  If ms>timer
    ;DIESE ZEILEN WERDEN NUR
    ;ALLER 'wait' MILLISEKUNDEN
    ;AUSGEFÜRHT
    timer=ms+wait
  EndIf
  ;...
  ;...
Until quit
[wobei sich die genauigkeit jedoch in grenzen hält, und auch vom OS abhängt]






beispiel:

Code: Alles auswählen

CreateImage(0, 20,20)
hWin=OpenWindow(0,  200,150, 200,60, "")
CreateGadgetList(hWin)
  ImageGadget(1, 20, 20,  200,100, ImageID(0) )
  ImageGadget(2, 90, 20,  200,100, ImageID(0) )
  ImageGadget(3, 160,20,  200,100, ImageID(0) )


wait1=80
wait2=1000
wait3=300

Repeat
  ms=ElapsedMilliseconds()

  If ms>timer1
    HideGadget(1, show1)
    show1!1
    timer1=ms+wait1
  EndIf

  If ms>timer2
    HideGadget(2, show2)
    show2!1
    timer2=ms+wait2
  EndIf

  If ms>timer3
    HideGadget(3, show3)
    show3!1
    timer3=ms+wait3
  EndIf

  If WaitWindowEvent(10)=#PB_Event_CloseWindow
    quit=1
  EndIf
Until quit

und was and51 meinte: "Wie läuft mein Spiel auf allen PCs gleich schnell?"
ist ein tut auf remi meier's page

Verfasst: 15.11.2006 15:36
von AND51
vonTurnundTaxis hat geschrieben:> Statt dem PB-Befehl solltest du lieber QueryPerformanceCounter_() & Co. nehmen, das ist dasselbe wie ElapsedMilliseconds()
Nein, das sollte man nicht, weil dadurch ein wichtiges Feature von PureBasic, die Plattformunabhängigkeit, verloren geht.
na und? Schon mal StandFurz' Beitrag genauer angesehen? Er installierte einen DirectX Patch. Also arbeitet er sowieso nur mit Windows.


#NULL hat geschrieben:..außerdem, wenn es dasselbe ist, warum sollte man es dann bevorzugen?
hast du nicht richtig gelesen :wink: Die Antwort habe ich schon gegeben.. Laut Win32.hlp wird im Gegensatz zu ElapsedMilliseconds() bei QueryPerformanceCounter_() richtige, echte hardware benutzt, um "hochauflösende", also exakte zeitmessungen zu ermöglichen.

Glaub mit, QueryPerformancecounter_() ist wesentlich geneuer als GetTickCount_(). Ich habe beide Methoden schon mal in der Schule verwendet, um Zeiten zu messen. GetTickCount_() entspricht halt ElapsedMilliseconds, nur dass letzteres auch Nicht-Win-kompatibel ist.



@ #NULL: danke für den Link; ich wusste nur noch den Titel, nicht aber, wo das Ganze zu finden ist.

Verfasst: 15.11.2006 17:05
von FGK
[Offtopic]

@AND51
na und? Schon mal StandFurz' Beitrag genauer angesehen? Er installierte einen DirectX Patch.
Also arbeitet er sowieso nur mit Windows.
hast du nicht richtig gelesen Die Antwort habe ich schon gegeben..
Laut Win32.hlp wird im Gegensatz zu ElapsedMilliseconds() bei QueryPerformanceCounter_() richtige,
echte hardware benutzt, um "hochauflösende", also exakte zeitmessungen zu ermöglichen.
Ist schon witzig, wie einer der häufig ohne genaues durchlesen der Posts
seinen Senf dazu geben muß, plötzlich so akribisch darauf hinweist man solle
gefällligst die Vorgänger-Postings doch genau durchlesen bevor man antwortet! :twisted:

[/Offtopic]

Verfasst: 15.11.2006 18:01
von edel
QueryPerformanceCounter ist eh ne schlechte Wahl fuer Spiele ,
braucht zu viel Leistung. ElapsedMilliseconds sollte hier vollkommen
ausreichen.

Verfasst: 15.11.2006 18:40
von AND51
FGK hat geschrieben:Ist schon witzig, wie einer der häufig ohne genaues durchlesen der Posts
seinen Senf dazu geben muß, plötzlich so akribisch darauf hinweist man solle
gefällligst die Vorgänger-Postings doch genau durchlesen bevor man antwortet! :twisted:
Heee, das war nicht böse gemeint! Das :wink: sollte dies eigentlich bekräftigen.
Ich wollte dich lediglich darauf hinweisen, dass das Ziel-OS eh nur Windows sein wird.

Selbst wenn: Findest du es also nicht gut, dass ich in diesem Thread mal aufgepasst habe und dass mir dieser Punkt nicht antgangen ist? Soll ich künftig lieber nur wieder die ersten drei Sätze der Posts lesen? :cry:

Verfasst: 15.11.2006 19:47
von vonTurnundTaxis
> Ich wollte dich lediglich darauf hinweisen, dass das Ziel-OS eh nur Windows sein wird.
Das mag ja sein, ging aber nicht aus dem Post hervor. Und warum sollte man sich mit überflüssiger WinAPI-Verwendung den Weg für eine eventuelle Portierung versperren?