excalibur 0.26.0-alpha.337 → 0.26.0-alpha.338

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -36,6 +36,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
36
36
 
37
37
  ### Fixed
38
38
 
39
+ - Fixed unreleased issue where clock when constraining fps would pass larger than expected elapsed times to the simulation causing things to "speed up" bizarrely
39
40
  - Fixed unreleased issue where games with no resources would crash
40
41
  - Fixed issue [#2152] where shared state in `ex.Font` and `ex.SpriteFont` prevented text from aligning properly when re-used
41
42
  - Fixed issue where fast moving `CompositeCollider`s were erroneously generating pairs for their constituent parts
@@ -87,30 +87,34 @@ export class Clock {
87
87
  const now = this.now();
88
88
  let elapsed = now - this._lastTime || 1; // first frame
89
89
  // Constrain fps
90
- const fpsInterval = this._maxFps === Infinity ? 0 : 1000 / this._maxFps;
91
- if (elapsed <= fpsInterval) {
92
- return; // too fast 😎 skip this frame
90
+ const fpsInterval = (1000 / this._maxFps);
91
+ // only run frame if enough time has elapsed
92
+ if (elapsed >= fpsInterval) {
93
+ let leftover = 0;
94
+ if (fpsInterval !== 0) {
95
+ leftover = (elapsed % fpsInterval);
96
+ elapsed = elapsed - leftover; // shift elapsed to be "in phase" with the current loop fps
97
+ }
98
+ // Resolves issue #138 if the game has been paused, or blurred for
99
+ // more than a 200 milliseconds, reset elapsed time to 1. This improves reliability
100
+ // and provides more expected behavior when the engine comes back
101
+ // into focus
102
+ if (elapsed > 200) {
103
+ elapsed = 1;
104
+ }
105
+ // tick the mainloop and run scheduled callbacks
106
+ this._elapsed = overrideUpdateMs || elapsed;
107
+ this._totalElapsed += this._elapsed;
108
+ this._runScheduledCbs();
109
+ this.tick(overrideUpdateMs || elapsed);
110
+ if (fpsInterval !== 0) {
111
+ this._lastTime = now - leftover;
112
+ }
113
+ else {
114
+ this._lastTime = now;
115
+ }
116
+ this.fpsSampler.end();
93
117
  }
94
- // Resolves issue #138 if the game has been paused, or blurred for
95
- // more than a 200 milliseconds, reset elapsed time to 1. This improves reliability
96
- // and provides more expected behavior when the engine comes back
97
- // into focus
98
- if (elapsed > 200) {
99
- elapsed = 1;
100
- }
101
- // tick the mainloop and run scheduled callbacks
102
- this._elapsed = overrideUpdateMs || elapsed;
103
- this._totalElapsed += this._elapsed;
104
- this._runScheduledCbs();
105
- this.tick(overrideUpdateMs || elapsed);
106
- // if fps interval is not a multple
107
- if (fpsInterval > 0) {
108
- this._lastTime = now - (elapsed % fpsInterval);
109
- }
110
- else {
111
- this._lastTime = now;
112
- }
113
- this.fpsSampler.end();
114
118
  }
115
119
  catch (e) {
116
120
  this._onFatalException(e);
@@ -130,6 +134,9 @@ export class StandardClock extends Clock {
130
134
  return this._running;
131
135
  }
132
136
  start() {
137
+ if (this._running) {
138
+ return;
139
+ }
133
140
  this._running = true;
134
141
  const mainloop = () => {
135
142
  // stop the loop
@@ -1 +1 @@
1
- {"version":3,"file":"Clock.js","sourceRoot":"","sources":["../../../src/engine/Util/Clock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Clock.js","sourceRoot":"","sources":["../../../src/engine/Util/Clock.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * excalibur - 0.26.0-alpha.337+ec9d264 - 2021-12-18
2
+ * excalibur - 0.26.0-alpha.338+da0895f - 2021-12-18
3
3
  * https://github.com/excaliburjs/Excalibur
4
4
  * Copyright (c) 2021 Excalibur.js <https://github.com/excaliburjs/Excalibur/graphs/contributors>
5
5
  * Licensed BSD-2-Clause
@@ -25388,30 +25388,34 @@ class Clock {
25388
25388
  const now = this.now();
25389
25389
  let elapsed = now - this._lastTime || 1; // first frame
25390
25390
  // Constrain fps
25391
- const fpsInterval = this._maxFps === Infinity ? 0 : 1000 / this._maxFps;
25392
- if (elapsed <= fpsInterval) {
25393
- return; // too fast 😎 skip this frame
25394
- }
25395
- // Resolves issue #138 if the game has been paused, or blurred for
25396
- // more than a 200 milliseconds, reset elapsed time to 1. This improves reliability
25397
- // and provides more expected behavior when the engine comes back
25398
- // into focus
25399
- if (elapsed > 200) {
25400
- elapsed = 1;
25401
- }
25402
- // tick the mainloop and run scheduled callbacks
25403
- this._elapsed = overrideUpdateMs || elapsed;
25404
- this._totalElapsed += this._elapsed;
25405
- this._runScheduledCbs();
25406
- this.tick(overrideUpdateMs || elapsed);
25407
- // if fps interval is not a multple
25408
- if (fpsInterval > 0) {
25409
- this._lastTime = now - (elapsed % fpsInterval);
25410
- }
25411
- else {
25412
- this._lastTime = now;
25391
+ const fpsInterval = (1000 / this._maxFps);
25392
+ // only run frame if enough time has elapsed
25393
+ if (elapsed >= fpsInterval) {
25394
+ let leftover = 0;
25395
+ if (fpsInterval !== 0) {
25396
+ leftover = (elapsed % fpsInterval);
25397
+ elapsed = elapsed - leftover; // shift elapsed to be "in phase" with the current loop fps
25398
+ }
25399
+ // Resolves issue #138 if the game has been paused, or blurred for
25400
+ // more than a 200 milliseconds, reset elapsed time to 1. This improves reliability
25401
+ // and provides more expected behavior when the engine comes back
25402
+ // into focus
25403
+ if (elapsed > 200) {
25404
+ elapsed = 1;
25405
+ }
25406
+ // tick the mainloop and run scheduled callbacks
25407
+ this._elapsed = overrideUpdateMs || elapsed;
25408
+ this._totalElapsed += this._elapsed;
25409
+ this._runScheduledCbs();
25410
+ this.tick(overrideUpdateMs || elapsed);
25411
+ if (fpsInterval !== 0) {
25412
+ this._lastTime = now - leftover;
25413
+ }
25414
+ else {
25415
+ this._lastTime = now;
25416
+ }
25417
+ this.fpsSampler.end();
25413
25418
  }
25414
- this.fpsSampler.end();
25415
25419
  }
25416
25420
  catch (e) {
25417
25421
  this._onFatalException(e);
@@ -25431,6 +25435,9 @@ class StandardClock extends Clock {
25431
25435
  return this._running;
25432
25436
  }
25433
25437
  start() {
25438
+ if (this._running) {
25439
+ return;
25440
+ }
25434
25441
  this._running = true;
25435
25442
  const mainloop = () => {
25436
25443
  // stop the loop
@@ -29026,7 +29033,7 @@ Promises_Promise = Promise_1 = Promises_decorate([
29026
29033
  * The current Excalibur version string
29027
29034
  * @description `process.env.__EX_VERSION` gets replaced by Webpack on build
29028
29035
  */
29029
- const EX_VERSION = "0.26.0-alpha.337+ec9d264";
29036
+ const EX_VERSION = "0.26.0-alpha.338+da0895f";
29030
29037
 
29031
29038
  polyfill();
29032
29039
  // This file is used as the bundle entry point and exports everything