Code edit (1 edits merged)
Please save this source code
User prompt
Migrate to the latest version of LK
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading '0')' in this line: 'levelText.setText('Level ' + (currentLevel + 1) + ' - Get ' + levels[currentLevel][0] + ' out of ' + levels[currentLevel][1] + ' shapes');' Line Number: 232
Code edit (19 edits merged)
Please save this source code
User prompt
in on tick if (currentLevel == levels.length) call game over
Code edit (1 edits merged)
Please save this source code
/**** * Classes ****/ var Shape = Container.expand(function () { var self = Container.call(this); console.log('Shape created'); var shapeGraphics; shapeGraphics = LK.getAsset('circle', { anchorX: 0.5, anchorY: 0.5 }); self.updateColor = function () { var h = self.colorIndex / 32; var s = 0.8; var v = 0.8; self.color = hsvToRgb(h, s, v); shapeGraphics.tint = self.color; }; self.colorIndex = Math.floor(Math.random() * 32); self.updateColor(); shapeGraphics.alpha = 0.5; self.addChild(shapeGraphics); var angle = Math.random() * Math.PI * 2; var speed = 7; self.vx = Math.cos(angle) * speed; self.vy = Math.sin(angle) * speed; self._move_migrated = function () { if (!self.isCollided) { self.x += self.vx; self.y += self.vy; if (self.x - self.width / 2 < 0 || self.x > 2048 - self.width / 2) { self.vx = -self.vx; } if (self.y - self.height / 2 < 0 || self.y > 2732 - self.height / 2) { self.vy = -self.vy; } } else { self.vx = 0; self.vy = 0; self.isCollided = true; self.scalingU = true; } }; self.scalingUp = false; self.scalingDown = false; var scaleUp2 = function scaleUp2() { self.scalingUp = true; }; self.explode = function () { self.isCollided = true; LK.setTimeout(scaleUp2, 1); }; var scaleDown2 = function scaleDown2() { self.scalingDown = true; }; self._update_migrated = function () { if (self.scalingUp) { if (self.scale.x < 4) { self.scale.x += 0.2; self.scale.y += 0.2; } else { self.scalingUp = false; LK.setTimeout(scaleDown2, 4000); } } else if (self.scalingDown) { if (self.scale.x > 0.2) { self.scale.x -= 0.2; self.scale.y -= 0.2; } else { if (self.parent) { self.parent.expandedCount--; } self.destroy(); } } }; }); var StaticShape = Container.expand(function () { var self = Container.call(this); self._update_migrated = function () { if (self.scalingUp) { if (self.scale.x < 4) { self.scale.x += 0.08; self.scale.y += 0.08; } else { self.scalingUp = false; LK.setTimeout(scaleDown2, 5000); } } else if (self.scalingDown) { if (self.scale.x > 0.4) { self.scale.x -= 0.4; self.scale.y -= 0.4; } else { if (self.parent) { self.parent.expandedCount--; } self.destroy(); } } }; var shapeGraphics; shapeGraphics = LK.getAsset('circle', { anchorX: 0.5, anchorY: 0.5 }); shapeGraphics.alpha = 0.5; self.addChild(shapeGraphics); self.isCollided = true; self.scalingUp = true; self.scalingDown = false; self.scale.set(1, 1); var scaleDown2 = function scaleDown2() { console.log('StaticShape.scaleDown2 called'); self.scalingDown = true; }; var update = function update() { if (self.scalingUp) { if (self.scale.x < 4) { self.scale.x += 0.08; self.scale.y += 0.08; } else { self.scalingUp = false; LK.setTimeout(scaleDown2, 4000); } } else if (self.scalingDown) { if (self.scale.x > 0.4) { self.scale.x -= 0.4; self.scale.y -= 0.4; } else { if (self.parent) { self.parent.expandedCount--; } self.destroy(); } } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ var hsvToRgb = function hsvToRgb(h, s, v) { var r, g, b; var i = Math.floor(h * 6); var f = h * 6 - i; var p = v * (1 - s); var q = v * (1 - f * s); var t = v * (1 - (1 - f) * s); switch (i % 6) { case 0: r = v, g = t, b = p; break; case 1: r = q, g = v, b = p; break; case 2: r = p, g = v, b = t; break; case 3: r = p, g = q, b = v; break; case 4: r = t, g = p, b = v; break; case 5: r = v, g = p, b = q; break; } return (r * 255 << 16) + (g * 255 << 8) + b * 255; }; var circlesCollide = function circlesCollide(o1, o2) { var dx = (o1.x - o2.x) * (o1.x - o2.x); var dy = (o1.y - o2.y) * (o1.y - o2.y); var radii = (o1.width + o2.width) / 2; radii *= radii; if (dx + dy < radii) { return true; } else { return false; } }; game.expandedCount = 1; game.setBackgroundColor('0xCCCCFF'); var currentLevel = 0; var playerScore = 0; var levels = [[1, 5], [3, 7], [6, 9], [8, 12], [10, 15], [15, 20], [18, 25], [25, 32], [30, 40], [35, 50], [50, 65], [75, 75]]; var shapes = []; var levelText = new Text2('Level 1 - Get 1 out of 5 shapes', { size: 80, fill: "#ffffff", align: 'center' }); levelText.anchor.set(0.5, 0); levelText.x = 0; levelText.y = 50; LK.gui.top.addChild(levelText); var collisionsCount = 0; var collisionText = new Text2('Shapes: ' + collisionsCount, { size: 80, fill: "#777777", align: 'center' }); collisionText.anchor.set(0.5, 0); collisionText.x = 0; collisionText.y = 150; LK.gui.top.addChild(collisionText); for (var i = 0; i < 5; i++) { var shape = game.addChild(new Shape()); shape.x = shape.width + Math.random() * (2048 - 2 * shape.width); shape.y = shape.height + Math.random() * (2732 - 2 * shape.height); shapes.push(shape); } var isClicked = false; game.staticShape = null; game.on('down', function (x, y, obj) { if (!isClicked) { isClicked = true; var event = obj; var pos = game.toLocal(event.global); game.staticShape = game.addChild(new StaticShape()); game.staticShape.x = pos.x - game.staticShape.width / 2; game.staticShape.y = pos.y - game.staticShape.height / 2; } }); LK.on('tick', function () { if (game.expandedCount == 0) { if (collisionsCount >= levels[currentLevel][0]) { collisionText.setText('Level Completed - now try this'); playerScore += collisionsCount; currentLevel++; } else { collisionText.setText('Try again'); } shapes.forEach(function (child) { child.destroy(); }); shapes = []; if (currentLevel == levels.length) { collisionText.setText('Good Job!\nAll levels completed!\nYou win :)'); LK.setScore(playerScore); LK.showGameOver(); return; } for (var i = 0; i < (levels[currentLevel] ? levels[currentLevel][1] : 0); i++) { var shape = game.addChild(new Shape()); shape.x = shape.width + Math.random() * (2048 - 2 * shape.width); shape.y = shape.height + Math.random() * (2732 - 2 * shape.height); shapes.push(shape); } isClicked = false; collisionsCount = 0; game.expandedCount = 1; if (currentLevel < levels.length) { levelText.setText('Level ' + (currentLevel + 1) + ' - Get ' + levels[currentLevel][0] + ' out of ' + levels[currentLevel][1] + ' shapes'); } else { levelText.setText('All levels completed!'); } return; } if (game.staticShape && game.staticShape._update_migrated) { game.staticShape._update_migrated(); } shapes.forEach(function (shape) { shape._move_migrated(); if (shape._update_migrated) { shape._update_migrated(); } game.children.forEach(function (child) { if (shape !== child && !shape.isCollided && child.isCollided && circlesCollide(shape, child)) { shape.explode(); collisionsCount++; game.expandedCount++; collisionText.setText('Shapes: ' + collisionsCount); } }); }); });
===================================================================
--- original.js
+++ change.js
@@ -188,8 +188,9 @@
};
game.expandedCount = 1;
game.setBackgroundColor('0xCCCCFF');
var currentLevel = 0;
+var playerScore = 0;
var levels = [[1, 5], [3, 7], [6, 9], [8, 12], [10, 15], [15, 20], [18, 25], [25, 32], [30, 40], [35, 50], [50, 65], [75, 75]];
var shapes = [];
var levelText = new Text2('Level 1 - Get 1 out of 5 shapes', {
size: 80,
@@ -231,8 +232,9 @@
LK.on('tick', function () {
if (game.expandedCount == 0) {
if (collisionsCount >= levels[currentLevel][0]) {
collisionText.setText('Level Completed - now try this');
+ playerScore += collisionsCount;
currentLevel++;
} else {
collisionText.setText('Try again');
}
@@ -241,8 +243,9 @@
});
shapes = [];
if (currentLevel == levels.length) {
collisionText.setText('Good Job!\nAll levels completed!\nYou win :)');
+ LK.setScore(playerScore);
LK.showGameOver();
return;
}
for (var i = 0; i < (levels[currentLevel] ? levels[currentLevel][1] : 0); i++) {
a white geometric square shape Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a white dot Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
flat white round disk Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
gif circle spinning animation Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.