AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit DXTimer

Ein Thema von Montu · begonnen am 25. Apr 2004 · letzter Beitrag vom 1. Mai 2004
Antwort Antwort
Montu

Registriert seit: 25. Apr 2004
3 Beiträge
 
#1

Problem mit DXTimer

  Alt 25. Apr 2004, 11:09
möchte nen kleines spiel(Pong) programmieren und benutze für die bewegung des Balls nen DXTimer, damit der Ball schneller ist. An sich läuft alles ohne Probleme, aber wenn ich dann im Spiel die Maus bewege, wird der Ball aufeinmal schneller, obwohl ich kein ereignis für onmousemove gesetzt hab. dürfte also eigentlich nicht sein.
liegt das jetzt am dxtimer selbst oder doch am code?

hier mal der code vom timer:


Code:
procedure TForm1.DXTimerBallTimer(Sender: TObject; LagCount: Integer);
begin
durchlauf:=durchlauf+1;
if durchlauf=1000 then                     //ball bewegung erst nach 1000 durchläufen, da interval auf 0
begin
if image3.top<=2 then                      //kollision oben
bally:=bally*(-1);                         //ball nach unten
if image3.top+20>=430 then                 //kollision unten
bally:=bally*(-1);                         //ball nach oben
if (image3.left=image1.left)and(image3.top+20>=image1.top)and(image3.top<=image1.top+64) then        //kollision mit player 1
ballx:=ballx*(-1);                         //ball nach rechts
if (image3.left+20=image2.left)and(image3.top+20>=image2.top)and(image3.top<=image2.top+64)then      //kollision mit player 2
ballx:=ballx*(-1);                         //ball nach links
if (image1.top=image3.top+20)and(image1.left<=image3.left+40)and(image1.left>=image3.left)then        //kollision mit player 1
bally:=-1;                                 //ball nach oben
if (image1.top+64=image3.top)and(image1.left<=image3.left+40)and(image1.left>=image3.left)then        //kollision mit player 1
bally:=1;                                  //ball nach unten
if (image2.top=image3.top+20)and(image2.left<=image3.left+40)and(image2.left>=image3.left)then        //kollision mit player 2
bally:=-1;                                 //ball nach oben
if (image2.top+64=image3.top)and(image2.left<=image3.left+40)and(image2.left>=image3.left)then        //kollision mit player 2
bally:=1;                                  //ball nach unten
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#2

Re: Problem mit DXTimer

  Alt 25. Apr 2004, 11:18
Stell mal das Interval auf 1 dann sollte das gehen... weil bei 1 hast 'genau' eine Millisekunde, bei 0 heisst das nur: so oft wie möglich. Und dann ist die Zeit nicht immer dieselbe. Ach und noch etwas: auf verschiedenen Rechnern wird dein Spiel unterschiedlich schnell sein. Mach dir mal Gedanken dadrüber *gg*
  Mit Zitat antworten Zitat
Montu

Registriert seit: 25. Apr 2004
3 Beiträge
 
#3

Re: Problem mit DXTimer

  Alt 25. Apr 2004, 11:26
danke.
hätte ich aber auch selbst drauf kommen können

ist zwar auf 1 langsamer aber das kann man ja mit ner for schleife wieder verändern

und das das auf anderen rechnern unterschiedlich schnell läuft ist mir auch klar. aber wofür gibt es mind. systemanforderungen *gg*
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#4

Re: Problem mit DXTimer

  Alt 25. Apr 2004, 13:21
Ja darum geht es ja nicht. Sagen wir mal es läuft mit 1GHz viel zu langsam, auf nem 2GHz richtig und auf 3GHZ viel zu schnell?? Dagegen musst du was machen...
  Mit Zitat antworten Zitat
Montu

Registriert seit: 25. Apr 2004
3 Beiträge
 
#5

Re: Problem mit DXTimer

  Alt 25. Apr 2004, 14:15
hatte das falsch verstanden. dachte, das wäre als scherz gemeint. jetz hab ich das mal am laptop getestet und das ist echt viel langsamer.

aber ich hab nich wirklich nen ansatz, wie ich die geschwindigkeit einheitlich machen kann. man müsste ja bei schnelleren rechnern die geschwindigkeit irgendwie drosseln und bei langsameren beschleunigen. aber wie das gehen soll. weiß ich nich.
kannst du mir vielleicht ne kleine hilfe geben?
  Mit Zitat antworten Zitat
Mautstelle

Registriert seit: 9. Feb 2004
15 Beiträge
 
#6

Re: Problem mit DXTimer

  Alt 29. Apr 2004, 19:46
ich hab grade das gleiche problem: mein Spiel ist auf unterschiedlichen Rechnern unterschiedlich schnell... da ich mein Spiel über Netzwerk spielen will, ist das leicht problematisch, wenn manche viel schneller rumlaufen können als andere

Es muss doch irgendwie möglich sein, dass es bei langsamen rechnern halt weniger frames gibt und das spiel ruckelt oder hüpft und bei schnellen und sehr schnellen mit der gleichen speed flüssig läuft. Bei counterstrike o.ä. geht das ja auch...

also wenn jemand von euch eine lösung findet wäre das echt cool.
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Problem mit DXTimer

  Alt 29. Apr 2004, 19:57
schneller wird es bestimmt nicht eine Millisekunde ist eine Millisekunde!
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#8

Re: Problem mit DXTimer

  Alt 29. Apr 2004, 22:24
Ganz einfach geht das. Du baust dir die Funktion ein, die 'Frames' pro Sekunde zu berechnen.
Ungefähr so:

Delphi-Quellcode:
var
StartTick: Int64;
ms_per_frame: double;
FPS: double;
Frames: Cardinal;

Bevor das Spiel startet:

StartTick := GetTickCount; //in eine globale Variable die Systemzeit, auf Millisekunden genau, reicht hier völlig Dann in der Schleife

Delphi-Quellcode:
inc(Frames); //ein 'Bild' wurde gezeichnet
if GetTickCount - StartTick >= 500 then //jede halbe Sekunde ausführen
 begin
 FPS := Frames / (GetTickCount-StartTick) * 1000; //die durchschnittlichen FPS der letzten halben Sekunde errechnen
 ms_per_frame := 1000 / FPS; //durchschnittliche Zeit pro Frame
 Frames := 0;
 StartTick := GetTickCount
 end;
Und dann machst du die Bewegungen der Gegenstände usw einfach von den FPS oder der Zeit pro Frame abhängig. Zum Beispiel in der Schleife:

position := position + Bewegungsreichweite_pro_Sekunde * ms_per_frame; Wenn du damit ein wenig experimentierst, läuft das wunderbar.

MfG
  Mit Zitat antworten Zitat
Mautstelle

Registriert seit: 9. Feb 2004
15 Beiträge
 
#9

Re: Problem mit DXTimer

  Alt 30. Apr 2004, 16:18
ah cool. besten dank. Da kann ich doch eigentlich auch direkt DXTimer.Framerate verwenden, oder?
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#10

Re: Problem mit DXTimer

  Alt 1. Mai 2004, 12:09
Kannte ich noch nicht, aber dürfte gehen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz