User prompt
reduce dotted line dot size 10 times
User prompt
add a small dotted line in circular shape on the trajectory path of the obstacle around the star
User prompt
draw the ciruclar orbit with a dotted line for the obstacle orbit around the star
User prompt
Fix Bug: 'Uncaught TypeError: Graphics is not a constructor' in or related to this line: 'var graphics = new Graphics();' Line Number: 6
User prompt
draw the orbit of the obstacle arround the star
User prompt
last obstacle added to each start should have a very small dotted line marking its orbit. use little resource for this.
Code edit (2 edits merged)
Please save this source code
User prompt
when transition effect is done to scoretxt make sure scoretxt always keeps the original y position
User prompt
add transition effect for scoretxt when its updated
User prompt
add effect to scoretxt when it updates
User prompt
reduce obtacle speed in 30%
Code edit (1 edits merged)
Please save this source code
User prompt
Center scorepop with star considering anchors
Code edit (1 edits merged)
Please save this source code
User prompt
To display the "+1" text properly, the `ScorePopup` class should instantiate a `Text2` object and then add it to the container using the `addChild` method, which is the standard way to add display objects to containers in many game engines, including LK.
User prompt
When star is destroyed show a +1 message where the star was
User prompt
When a star is destoyed show a text for 1 second where the star was that says "+1"
User prompt
Fix Bug: 'TypeError: obstacles[i].move is not a function' in or related to this line: 'obstacles[i].move();' Line Number: 235
User prompt
Add a very small dotted line marking the orbit of each new obstacle
User prompt
When a obstacle is created, draw a dotted line of the onstacles orbit
User prompt
When obstacles are 2000 y offscreen destrpy them to increease performance
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
After the player has 6 points, start adding 100 pixles more for the next star y spawn position. This will be cumulative
User prompt
dot partcicles should take 1 whole second to dissapear
/**** * Classes ****/ var DottedLine = Container.expand(function (starX, starY, radius) { var self = Container.call(this); self.starX = starX; self.starY = starY; self.radius = radius; for (var i = 0; i < 360; i += 10) { var angle = i * Math.PI / 180; var dot = self.attachAsset('dot', { anchorX: 0.5, anchorY: 0.5 }); dot.scaleX = dot.scaleY = 0.01; dot.x = Math.cos(angle) * self.radius; dot.y = Math.sin(angle) * self.radius; } self.moveDown = function (distance) { self.starY += distance * 2; }; }); var ScorePopup = Container.expand(function (x, y) { var self = Container.call(this); self.x = x; self.y = y; var scoreText = new Text2('+1', { size: 100, fill: "#ffffff", anchorX: 0.5, anchorY: 0.5 }); scoreText.x = -scoreText.width / 2; scoreText.y = -scoreText.height / 2; self.addChild(scoreText); self.alpha = 1; var duration = 90; self.update = function () { duration--; self.y -= 2; self.alpha -= 1 / 90; if (duration <= 0) { self.destroy(); } }; game.addChild(self); }); var ParticleEffect = Container.expand(function (x, y) { var self = Container.call(this); self.x = x; self.y = y; var particles = []; for (var i = 0; i < 20; i++) { var particle = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5 }); particle.scaleX = particle.scaleY = Math.random() * 0.5 + 0.5; particle.alpha = 0.7; particle.vx = (Math.random() - 0.5) * 10; particle.vy = (Math.random() - 0.5) * 10; particles.push(particle); } self.update = function () { for (var i = particles.length - 1; i >= 0; i--) { particles[i].x += particles[i].vx; particles[i].y += particles[i].vy; particles[i].alpha -= 0.02; if (particles[i].alpha <= 0) { particles[i].destroy(); particles.splice(i, 1); } } if (particles.length === 0) { self.destroy(); } }; game.addChild(self); }); var DotParticleEffect = Container.expand(function (x, y) { var self = Container.call(this); self.x = x; self.y = y; var particles = []; var angleIncrement = Math.PI * 2 / 20; var speed = 30; for (var i = 0; i < 20; i++) { var particle = self.attachAsset('dot', { anchorX: 0.5, anchorY: 0.5 }); particle.scaleX = particle.scaleY = 0.5; particle.alpha = 1; var angle = i * angleIncrement; particle.vx = Math.cos(angle) * speed; particle.vy = Math.sin(angle) * speed; particles.push(particle); } self.update = function () { for (var i = particles.length - 1; i >= 0; i--) { particles[i].x += particles[i].vx; particles[i].y += particles[i].vy; particles[i].alpha -= 0.0167; if (particles[i].alpha <= 0) { particles[i].destroy(); particles.splice(i, 1); } } if (particles.length === 0) { self.destroy(); } }; game.addChild(self); }); var Dot = Container.expand(function () { var self = Container.call(this); var dotGraphics = self.attachAsset('dot', { anchorX: 0.5, anchorY: 0.5 }); self.destroyed = false; self.velocityY = 0; self.gravity = 0.7; self.bounce = -15; self.update = function () { var previousY = self.y; self.velocityY += self.gravity; self.y += self.velocityY; if (self.y > 2732 - self.height / 2) { self.velocityY = self.bounce; } self.movedDistance = self.y - previousY; }; self.bounceUp = function () { if (!self.destroyed) { self.velocityY = self.bounce; } }; }); var CircularObstacle = Container.expand(function (starX, starY, radius, angleSpeed, initialAngle) { var self = Container.call(this); var obstacleGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.dottedLine = new DottedLine(starX, starY, radius); self.addChild(self.dottedLine); self.angle = initialAngle || 0; self.radius = radius; self.angleSpeed = angleSpeed; self.starX = starX; self.starY = starY; self.updatePosition = function () { self.x = self.starX + Math.cos(self.angle) * self.radius; self.y = self.starY + Math.sin(self.angle) * self.radius; self.angle += self.angleSpeed * 0.35; obstacleGraphics.rotation += self.angleSpeed * 0.35; self.dottedLine.x = self.x; self.dottedLine.y = self.y; }; self.moveDown = function (distance) { self.starY += distance * 2; self.dottedLine.moveDown(distance); }; self.updatePosition(); }); var Star = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5 }); self.scaleDirection = 1; self.scaleSpeed = 0.005; self.minScale = 0.8; self.maxScale = 1.2; self.moveDown = function (distance) { self.y += distance * 2; if (self.y > 2732 - self.height / 2) { self.y = -self.height / 2; } }; self.updateScale = function () { if (self.scaleDirection === 1 && starGraphics.scale.x < self.maxScale) { starGraphics.scale.x += self.scaleSpeed; starGraphics.scale.y += self.scaleSpeed; } else if (self.scaleDirection === -1 && starGraphics.scale.x > self.minScale) { starGraphics.scale.x -= self.scaleSpeed; starGraphics.scale.y -= self.scaleSpeed; } if (starGraphics.scale.x >= self.maxScale || starGraphics.scale.x <= self.minScale) { self.scaleDirection *= -1; } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ function createParticleEffect(x, y) { var effect = new ParticleEffect(x, y); LK.on('tick', function () { effect.update(); }); } function createDotParticleEffect(x, y) { var effect = new DotParticleEffect(x, y); LK.on('tick', function () { effect.update(); }); } var dot = game.addChild(new Dot()); dot.x = 2048 / 2; dot.y = 2732 - dot.height / 2; var obstacles = []; function updateObstacles() { var obstacleCount = 5 + LK.getScore(); while (obstacles.length < obstacleCount) { var obstacle = game.addChild(new Obstacle()); obstacle.x = obstacle.direction === 1 ? -obstacle.width / 2 : 2048 + obstacle.width / 2; obstacle.y = Math.random() * (2732 - obstacle.height) + obstacle.height / 2; obstacles.push(obstacle); } } function spawnInitialObstacles() { var starX = 2048 / 2; var starY = 2732 / 2; var radius = 300; var angleSpeed = 0.05; for (var i = 0; i < 20; i++) { var obstacle = game.addChild(new CircularObstacle(starX, starY, radius, angleSpeed)); obstacles.push(obstacle); } } spawnInitialObstacles(); var scoreTxt = new Text2('', { size: 200, fill: "#ffffff" }); scoreTxt.anchor.set(0.5, 0); scoreTxt.x = 600; LK.gui.top.addChild(scoreTxt); LK.gui.top.addChild(scoreTxt); game.on('down', function (obj) { if (dot) { dot.bounceUp(); } }); var stars = []; var star = game.addChild(new Star()); star.x = 2048 / 2; star.y = 2732 / 2; stars.push(star); LK.on('tick', function () { dot.update(); for (var i = 0; i < obstacles.length; i++) { if (obstacles[i] instanceof CircularObstacle) { obstacles[i].updatePosition(); } else { obstacles[i].move(); } if (dot.y < 1500 && dot.movedDistance < 0) { obstacles[i].moveDown(-dot.movedDistance); } if (dot.intersects(obstacles[i])) { if (!dot.destroyed) { createDotParticleEffect(dot.x, dot.y); dot.destroyed = true; } dot.destroy(); LK.setTimeout(function () { LK.showGameOver(); }, 1000); } else if (obstacles[i].y > 2732 + 2000) { obstacles[i].destroy(); obstacles.splice(i, 1); } } for (var j = stars.length - 1; j >= 0; j--) { stars[j].updateScale(); if (dot.intersects(stars[j])) { LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore().toString()); scoreTxt.alpha = 0; var originalY = scoreTxt.y; LK.on('tick', function updateScoreTextFadeIn() { scoreTxt.alpha += 0.05; scoreTxt.y = originalY + (1 - scoreTxt.alpha) * 50; if (scoreTxt.alpha >= 1) { scoreTxt.alpha = 1; LK.off('tick', updateScoreTextFadeIn); } }); var oldStarY = stars[j].y; createParticleEffect(stars[j].x, stars[j].y); var scorePopup = new ScorePopup(stars[j].x, stars[j].y); LK.on('tick', function () { scorePopup.update(); }); stars[j].destroy(); stars.splice(j, 1); var newStar = game.addChild(new Star()); newStar.x = 2048 / 2; var additionalYOffset = LK.getScore() > 1 ? (LK.getScore() - 1) * 200 : 0; newStar.y = oldStarY - 2000 - additionalYOffset; stars.push(newStar); // Add a cumulative number of CircularObstacles at random positions around the new star var cumulativeObstacles = 1 + LK.getScore(); for (var k = 0; k < cumulativeObstacles; k++) { var randomAngle = Math.random() * Math.PI * 2; // Random angle in radians var radiusOffset = k * 100; var circularObstacle = game.addChild(new CircularObstacle(newStar.x, newStar.y, 300 + radiusOffset, 0.05 * (k % 2 === 0 ? 1 : -1), randomAngle)); obstacles.push(circularObstacle); } } else if (dot.y < 1500 && dot.movedDistance < 0) { stars[j].moveDown(-dot.movedDistance); } } });
===================================================================
--- original.js
+++ change.js
@@ -11,9 +11,9 @@
var dot = self.attachAsset('dot', {
anchorX: 0.5,
anchorY: 0.5
});
- dot.scaleX = dot.scaleY = 0.1;
+ dot.scaleX = dot.scaleY = 0.01;
dot.x = Math.cos(angle) * self.radius;
dot.y = Math.sin(angle) * self.radius;
}
self.moveDown = function (distance) {