Tags:
c++
delphi
Hej allesammen...
Jeg har været i gang med at lave et wormgame, først i Delphi derefter i C++ (Borland C++ Builder). I begge tilfælde har jeg brugt TTimer i mangel på bedre, men den giver nogle meget varierende intervaler på forskellige computere så det er slet ikke optimalt.
F.eks. da jeg først gik i gang med at lave spillet på en 900Mhz-bærbar kørte det fint, så kopierede jeg det over på en 450Mhz-pc, hvor det kørte meget langsommere. Derefter kopierede jeg det over på en anden 900Mhz-pc hvor det kørte endnu langsommere... meget mystisk!?
Er der nogen som har et forslag til hvordan man kan få spillet til at have (næsten) samme hastighed på alle computere?
Jeg tænkte lidt på om DirectDraw kunne bruges, men jeg ved ikke hvordan...
Mvh Morten Feldthaus
5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
lidt som rene siger er det nok smartest at bruge en af windows' timere, getticks, timeGetTime ol. hvis du nu har lyd i dit spil, fx hvis du afspiller en mp3 kan du bruge musik biblotekerne bass eller fmod til at lave timing.. jeg bruger selv dette.
0
<quote>Hej allesammen...
Jeg har været i gang med at lave et wormgame, først i Delphi derefter i C++ (Borland C++ Builder). I begge tilfælde har jeg brugt TTimer i mangel på bedre, men den giver nogle meget varierende intervaler på forskellige computere så det er slet ikke optimalt.
F.eks. da jeg først gik i gang med at lave spillet på en 900Mhz-bærbar kørte det fint, så kopierede jeg det over på en 450Mhz-pc, hvor det kørte meget langsommere. Derefter kopierede jeg det over på en anden 900Mhz-pc hvor det kørte endnu langsommere... meget mystisk!?
Er der nogen som har et forslag til hvordan man kan få spillet til at have (næsten) samme hastighed på alle computere?
Jeg tænkte lidt på om DirectDraw kunne bruges, men jeg ved ikke hvordan...
Mvh Morten Feldthaus</quote>
Du kan bruge en DXTimer fra DelphiX, Den er lige hurtig på alle computere.
Emil Melgaard
<p><a href="mailto:emil.melgaard@private.dk">emil.melgaard@private.dk</a></p>
0
> Du kan bruge en DXTimer fra DelphiX, Den er lige hurtig på alle computere.
Jeg har lige prøvet det på min egen maskine, og der er ingen forskel mellem DXTimer og TTimer af hvad jeg har set.
Men jeg vil prøve at sammenligne på forskellige computere indenfor et par dage.
/Morten
0
Du skal prøve at kigge på funktionerne GetTickCount(), QueryPerformanceCounter() og QueryPerformanceFrequency(). Prøv at slå dem op inde på www.msdn.microsoft.com. De bygger på den type timere som hedder high-frequency timere. GetTickCount() fortæller dig hvor mange milliseconder (1/1000 sec) der er gået siden windows startede op, og de to andre giver dig en endnu højere opløsning.
Lad være med at bevæge dine skærm-objecter baseret på din framerate. Det vil sige at du ikke bare skal lægge f.eks. 3 til x cordinaten og 3 til y cordinaten for at bevæge objektet skråt nedad til højre. Derimod skal du bevæge dem baseret på hvor lang tid der går mellem hver frame. Det vil sige at du for hver frame skal teste hvor lang tid der er gået siden sidst (pseudo-code):
timeOld = GetTime();
while(1)
{
timeThis = GetTime();
timeDifference = timeOld - timeThis; // forskellen ligger nu i timeDifference
timeOld = timeThis;
Render();
}
Når du så skal bevæge dine objekter skal du gøre det ved sætte farten til pixels per millisecond og ikke pixels per frame. For hvert gennemløb i overstående loop er der gået en frame. Når du skal bevæge din objects skal du gøre det sådan her:
Object.X = Object.VelX * timeDifference;
Object.Y = Object.VelY * timeDifference;
Hvis der er noget du ikke forstår, og det er der sikkert fordi jeg har nok ikke forklaret mig helt godt, skal du endelig bare skrive til mig på rene@petersen.tc Du kan også prøve at gå til siden www.gamedev.net og finde nogle gode tutorials som beskriver hvodan man gør.
Held og lykke!
René
0
Undskyld det tog såååå langt tid!!!
Jeg fandt aldrig ud af det med DX-timer'en, den var lidt (meget) mærkelig. Men det som René skrev lød sku' meget godt... så hvis du (Rene) vil give et svar i stedet for en kommentar, så for du pointene!
Mvh Morten[Redigeret d. 01/04-02 00:00:03 af Morten Feldthaus]