Skip to content

Commit 9974801

Browse files
authored
Merge pull request #1259 from melonjs/fix/pr-review-followups
Address review feedback from PR #1257 and #1258
2 parents acac4e4 + 9d49f1b commit 9974801

5 files changed

Lines changed: 31 additions & 17 deletions

File tree

packages/melonjs/src/level/tiled/TMXLayer.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,8 @@ export default class TMXLayer extends Renderable {
248248
onDeactivateEvent() {
249249
// clear all allocated objects
250250
this.animatedTilesets = undefined;
251-
if (this.canvasRenderer) {
252-
this.canvasRenderer = null;
253-
}
251+
// keep canvasRenderer for reuse — dropping the reference would leak
252+
// event listeners registered by CanvasRenderer's constructor
254253
}
255254

256255
/**

packages/melonjs/src/level/tiled/renderer/TMXRenderer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export default class TMXRenderer {
8484
// only adjust position if obj.gid is defined
8585
if (typeof obj.gid === "number") {
8686
// Tiled objects origin point is "bottom-left" in Tiled,
87-
// "top-left" in melonJS)
87+
// "top-left" in melonJS
8888
obj.y -= obj.height;
8989
}
9090
}

packages/melonjs/src/renderable/entity/entity.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ import Sprite from "../sprite.js";
157157
* @see Body
158158
*/
159159
export default class Entity extends Renderable {
160+
static _deprecationWarned = false;
161+
160162
/**
161163
* @param {number} x - the x coordinates of the entity object
162164
* @param {number} y - the y coordinates of the entity object
@@ -176,8 +178,11 @@ export default class Entity extends Renderable {
176178
* @deprecated since 18.1.0 — see the class-level documentation for migration examples
177179
*/
178180
constructor(x, y, settings) {
179-
// deprecation warning
180-
warning("me.Entity", "me.Sprite combined with me.Body", "18.1.0");
181+
// deprecation warning (once per session)
182+
if (!Entity._deprecationWarned) {
183+
warning("me.Entity", "me.Sprite combined with me.Body", "18.1.0");
184+
Entity._deprecationWarned = true;
185+
}
181186

182187
// call the super constructor
183188
super(x, y, settings.width, settings.height);

packages/melonjs/src/video/texture/atlas.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -517,8 +517,12 @@ export class TextureAtlas {
517517
for (const i in names) {
518518
const name = Array.isArray(names) ? names[i] : i;
519519
const region = this.getRegion(name);
520+
// skip non-region keys (e.g. "anims" added by Aseprite parser)
520521
if (region == null) {
521-
throw new Error("Texture - region for " + name + " not found");
522+
if (Array.isArray(names)) {
523+
throw new Error("Texture - region for " + name + " not found");
524+
}
525+
continue;
522526
}
523527
regions.push({ name, region });
524528
const frameW = region.sourceSize ? region.sourceSize.w : region.width;

packages/melonjs/tests/tmxrenderer.spec.js

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -123,16 +123,22 @@ describe("TMX Renderers", () => {
123123
// This verifies the critical bug fix:
124124
// previously this.centers[i].sub(rel) mutated the centers
125125

126-
// Call pixelToTileCoords multiple times with the same input
127-
const result1 = renderer.pixelToTileCoords(50, 50);
128-
const result2 = renderer.pixelToTileCoords(50, 50);
129-
const result3 = renderer.pixelToTileCoords(50, 50);
130-
131-
// Results should be identical since centers are not mutated
132-
expect(result1.x).toEqual(result2.x);
133-
expect(result1.y).toEqual(result2.y);
134-
expect(result2.x).toEqual(result3.x);
135-
expect(result2.y).toEqual(result3.y);
126+
// Call pixelToTileCoords to trigger center calculations
127+
renderer.pixelToTileCoords(50, 50);
128+
129+
// Save centers values after first call
130+
const centersAfterFirst = renderer.centers.map((c) => {
131+
return { x: c.x, y: c.y };
132+
});
133+
134+
// Call again — centers should be re-set to the same values
135+
renderer.pixelToTileCoords(50, 50);
136+
137+
// Verify centers were not mutated by the distance calculation
138+
for (let i = 0; i < 4; i++) {
139+
expect(renderer.centers[i].x).toEqual(centersAfterFirst[i].x);
140+
expect(renderer.centers[i].y).toEqual(centersAfterFirst[i].y);
141+
}
136142
});
137143

138144
it("pixelToTileCoords should return consistent results (staggerX)", () => {

0 commit comments

Comments
 (0)