Antriel

Members
  • Content Count

    204
  • Joined

  • Last visited

About Antriel

  • Rank
    Advanced Member

Contact Methods

  • Website URL
    https://antriel.com
  • Twitter
    PeterAchberger

Profile Information

  • Gender
    Male
  • Location
    Slovakia/Czechia

Recent Profile Visitors

2,513 profile views
  1. Antriel

    Objects might fall through despite of collision

    You can increase the `fps` parameter of Arcade in game config.
  2. Antriel

    So, what's the deal with sound?

    See how phaser does it: Checking on init: https://github.com/photonstorm/phaser/blob/476a31093ad5b1d723392720401be83541878b04/src/sound/webaudio/WebAudioSoundManager.js#L76 And subsequent waiting for input to unlock: https://github.com/photonstorm/phaser/blob/476a31093ad5b1d723392720401be83541878b04/src/sound/webaudio/WebAudioSoundManager.js#L143
  3. Antriel

    So, what's the deal with sound?

    https://developers.google.com/web/updates/2017/09/autoplay-policy-changes Basically you need to start/unlock the audio on user input first, then it works at any time. I handle that by making user start the game via click after the preloader.
  4. 50 Hz is normal. Try doing the setInterval that just logs the time too, with something like 10 ms interval. If that fires around the problematic message, with +-10ms interval, then event loop isn't too busy. Also, is there a visible missing date? Like before there's delta of 0, is there delta of 100? If not then it really feels like the message callback is ran more than it should (which you can determine by the contents of the message).
  5. Then it's either what @mattstyles said, or your event loop is too busy and can't process the message fast enough – that might show in profiling. I would try to simply log `Date.now()` on arrival of messages and maybe also run another timeout with much smaller timestep than what server sends, logging the time too, to visualize whether event loop is free or not.
  6. The packet drops along the way, you can't test for that like that. You could try doing it on a good LAN connection (that you tested) or a localhost loopback, which shouldn't drop packets at all.
  7. Unfortunately, not with TCP. And the only way to do UDP on the web is via WebRTC, which is aimed at media and p2p networking, so achieving client-server architecture there is difficult.
  8. Websockets use TCP under the hood. If a packet drops along the way, TCP will buffer any additional packets until it also receives the one it lost. After it does, it will supply everything it has, which can cause what you see. There is nothing you can do to prevent that apart from using multiple websocket connections and implementing something like udp over tcp.
  9. Antriel

    Is there a problem with phaser time

    Yeah. Basically if you needed de/acceleration, you would adjust speed by using the `dt`. Which won't work well unless you use fixed delta time. Which is what the articles I linked talk about.
  10. Antriel

    Is there a problem with phaser time

    Phaser smooths out the delta time (see source) so that the gameplay is better. That's what causes the desync with real time. If you need precise timing, you need to run your own clock. Keep in mind internal things like tweens will still use Phaser's clock. If that's an issue, either tween manually or hack Phaser to pass unsmoothed deltaTime. The issue you see on the android device could be cause by JIT/startup causing slower performance at the beginning, which results in big delta time, which Phaser in turns lowers into sensible values. So a second passes, but Phaser only simulated half a second. Also keep in mind that your fix approach won't really work well on devices with different frame rates. It's not always 60 fps. I recommend reading Fix Your Timestep and if you plan on having custom physics read Integration Basics (`x += velocity * dt` is ok, but if `velocity` depends on delta too, better read it).
  11. Antriel

    Be Careful with GameDistribution

    Given that mine is also changed and changed between today and yesterday, I would assume the issue is purely internal. The values looked pretty legit, so I'm quite certain it's not a hack, just some very dumb programming.
  12. There isn't `current_time` ever used there, it's just used to describe the principle. If you look at it properly you see it also subtracts time from the current time.
  13. Essentially yes. It's all nicely explained in my blog too.
  14. No, in a way it's `Date.now()`. Or some number that's relative to that and the server's time. E.g. I simply start counting time when first message arrives and I know what rate to expect, so I know what timestamp the other messages have. Imagine starting a stopwatch when first message comes and timing your whole game based on that.
  15. `current_time` is simply the time that is now. If server sends you `{x: 100, time: 0}` and then `{x: 200, time: 100}`, and your current time is 50, you interpolate x to be 150. Of course it's a bit more complex as you need to keep that time relative to what server is sending out. And interpolate a bit in the past to cover delayed messages. So server sends you e.g. 4 positions, you start showing the first, second... meanwhile you get 5th, 6th... etc.