2
\$\begingroup\$

I am trying to fire an action every 125ms.

To get the current milliseconds, I go this way:

double passedMs = GameTime.TotalGameTime.TotalMilliseconds; //this is a double as well currentMs += (currentMs - passedMs) if (currentMs > 125) { //Action currentMs = 0; } 

But the value I get in passedMs is not simply milliseconds, it's more like 8833.351.

So what could I do here?

\$\endgroup\$

2 Answers 2

5
\$\begingroup\$

My understanding is that TotalGameTime represents how long it's been since the executable opened. In your case, it's been up around 8 seconds. For your += statement, I think currently you're taking the difference of the two, and adding it to the current time...? I'm not even sure what that resulting value would be.

I think more likely, you're looking for ElapsedGameTime (documentation on MSDN); replace the contents of the parentheses with just that to get what you're looking for:

currentMs += GameTime.ElapsedGameTime.TotalMilliseconds; 

Also, I would advise you to subtract 125 from currentMs, rather than setting it to 0. If currentMS becomes 200, then it's going to have somewhat inconsistent timing.

if (currentMs > 125) { // Action currentMs -= 125; } 
\$\endgroup\$
1
\$\begingroup\$

Use an accumulation buffer, this way if you wait too long you don't waste the left-over. (But get your timing logic straight first)

currentMs += GameTime.ElapsedGameTime.TotalMilliseconds; if (currentMs > 125) { //Action currentMs -= 125; } 

EDIT: oh well other answer has got the same code now lol

\$\endgroup\$
1
  • \$\begingroup\$ Sorry :) I was like "wow this answer would be great if it had some code", so I added it before I saw yours! People: Upvote this guy too! \$\endgroup\$ Commented Oct 4, 2013 at 12:46

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.