FYI - Good that you're doing it that way. I have to recommend switching to nanoTime, though. I've witnessed multi-second time updates (from the system, not from me) while playing my games and it's not pretty. I've switched everything to nanoTime / 1000000 since then (which gives milliseconds) and all seems to be well.
On Mar 10, 10:01 pm, Samsyn <[email protected]> wrote: > Thanks, Robert! > > yes, don't worry, I wasn't doing that. :-) > > Basically the server has the master time, each client has a dynamic > ping value to the server, which is also shared with the other clients > for suitable adjustments. at key moments a client notes the local > currentMillis() value matching an important server time value, > computes a delta which it can then use to move between currentMillis > and server time as needed (until the next Important Event freshens the > sync). > > Important Events occur frequently enough to keep the clients > reasonably well synched, so long as I can depend on currentMillis to > actually move forward in real time (i.e. 500 ms from now, I need it to > be roughly 500 counts higher). Though a little jitter doesn't bother > me, seeing it jump 10 SECONDS in a 2 second period was causing me > alarm. > > I will, of course, fail if the client changes their clock setting in > mid-game. And I suppose the phone itself could initiate such a change > based on some signal from the provider, but I tell myself it will only > fail 'a little' in that case (assuming the hardware is not horribly > defective), so I choose not to worry about that. (knowing that I > COULD use the nanotime to remove that sensitivity, but something makes > me prefer currentMillis right now... some unproven suspicion that it > is a cheaper computation.) > > And I assume what was happening before was that running multiple > emulators under eclipse was starving them of cpu to such a degree that > an internal emulation of the phone clock was missing some important > polled event. I can't decide if I think that's cool or not. Would it > be cheating for the emulator to just read the host hardware clock?... > I guess so. So instead it probably reads a simulation of the > nanoclock, which turns out to be unreliable in a low cpu cycle > environment. > > And manually running emulators in separate CMD windows seems to help > it take advantage of the host's multiple cores. Which I guess would > be asking Eclipse a lot to do, given that it is also giving me all > those nice debug hooks :-) I shouldn't be so demanding. I love you, > Eclipse, I really do, except when you crash or that time you deleted > every source file in my project with nary a warning. > > Thanks again! > > - Dan > > On Mar 10, 5:53 pm, Robert Green <[email protected]> wrote: > > > > > Samsyn, > > > For multiplayer synchronization, you absolutely can not count on the > > current time of either device. Here's one way to handle it: > > > Both host and client use System.nanoTime() / 1000000; That gives you > > a fairly accurate counter to use. > > Host sends snapshots with their current time. Client adapts the > > host's time for interpolation by attempting to detect ping and use it > > as a skew. > > > On Mar 10, 7:36 pm, Samsyn <[email protected]> wrote: > > = -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

