User prompt
danger target can hit another target class
User prompt
dangertarget moving fast
User prompt
Please fix the bug: 'LK.isMusicPlaying is not a function' in or related to this line: 'if (!storage.musicMuted && !LK.isMusicPlaying('gameMusic')) {' Line Number: 382
User prompt
problem is music background not active
User prompt
fix music backround problem ↪💡 Consider importing and using the following plugins: @upit/storage.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Slash Master
Initial prompt
slash game
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Slash = Container.expand(function () { var self = Container.call(this); self.graphic = self.attachAsset('slash', { anchorX: 0.5, anchorY: 0.5 }); self.points = []; self.active = false; self.lifetime = 0; self.start = function (x, y) { self.points = [{ x: x, y: y }]; self.active = true; self.lifetime = 10; self.x = x; self.y = y; self.rotation = 0; self.alpha = 1; self.visible = true; }; self.addPoint = function (x, y) { if (!self.active) { return; } self.points.push({ x: x, y: y }); if (self.points.length > 1) { var lastPoint = self.points[self.points.length - 2]; var newPoint = { x: x, y: y }; // Calculate direction for rotation var dx = newPoint.x - lastPoint.x; var dy = newPoint.y - lastPoint.y; // Position at midpoint self.x = (lastPoint.x + newPoint.x) / 2; self.y = (lastPoint.y + newPoint.y) / 2; // Calculate rotation self.rotation = Math.atan2(dy, dx); // Set length based on distance var distance = Math.sqrt(dx * dx + dy * dy); self.scale.x = distance / 50; // 50 is the base width of the slash shape } }; self.end = function () { self.active = false; }; self.update = function () { if (!self.active && self.visible) { self.lifetime--; self.alpha -= 0.1; if (self.lifetime <= 0 || self.alpha <= 0) { self.visible = false; } } }; return self; }); var Target = Container.expand(function (type) { var self = Container.call(this); self.type = type || 'normal'; self.slashed = false; self.speed = 0; self.directionX = 0; self.directionY = 0; self.rotationSpeed = 0; var assetId; if (self.type === 'normal') { assetId = 'normalTarget'; } else if (self.type === 'special') { assetId = 'specialTarget'; } else if (self.type === 'danger') { assetId = 'dangerTarget'; } self.graphic = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); self.setup = function (options) { self.speed = options.speed || 10; self.directionX = options.directionX || 0; self.directionY = options.directionY || 0; self.rotationSpeed = (Math.random() - 0.5) * 0.1; self.x = options.startX; self.y = options.startY; return self; }; self.slice = function () { if (self.slashed) { return false; } self.slashed = true; if (self.type === 'normal') { LK.getSound('slashSound').play(); LK.effects.flashObject(self, 0xffffff, 200); return 10; } else if (self.type === 'special') { LK.getSound('specialSound').play(); LK.effects.flashObject(self, 0xffffff, 300); return 25; } else if (self.type === 'danger') { LK.getSound('dangerSound').play(); LK.effects.flashObject(self, 0xff0000, 300); return -1; // Signal game over } return 0; }; self.update = function () { if (self.slashed) { self.alpha -= 0.05; self.scale.x *= 0.95; self.scale.y *= 0.95; if (self.alpha <= 0) { self.destroy(); } return; } self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; self.rotation += self.rotationSpeed; // Check for collision with other targets if this is a danger target if (self.type === 'danger' && !self.slashed) { for (var i = 0; i < targets.length; i++) { var otherTarget = targets[i]; // Skip if checking against itself or already slashed targets if (otherTarget === self || otherTarget.slashed || otherTarget.type === 'danger') { continue; } // Simple distance-based collision detection var dx = self.x - otherTarget.x; var dy = self.y - otherTarget.y; var distance = Math.sqrt(dx * dx + dy * dy); // If targets are close enough (considering their size), trigger a collision if (distance < (self.graphic.width / 2 + otherTarget.graphic.width / 2) * 0.8) { // Trigger the other target's slice method otherTarget.slice(); } } } // Check if it's off-screen if (self.x < -200 || self.x > 2248 || self.y < -200 || self.y > 2932) { self.destroy(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x003366 }); /**** * Game Code ****/ // Game variables var targets = []; var slash = null; var score = 0; var isSlashing = false; var difficulty = 1; var targetFrequency = 50; // How often targets spawn (lower = more frequent) var lastSlashPoint = { x: 0, y: 0 }; var highScore = storage.highScore || 0; // Set up background var background = LK.getAsset('background', { anchorX: 0, anchorY: 0 }); game.addChild(background); // Create slash effect slash = game.addChild(new Slash()); slash.visible = false; // Set up UI elements var scoreTxt = new Text2('Score: 0', { size: 100, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var highScoreTxt = new Text2('Best: ' + highScore, { size: 70, fill: 0xCCCCCC }); highScoreTxt.anchor.set(0.5, 0); highScoreTxt.y = 110; LK.gui.top.addChild(highScoreTxt); // Game event handlers game.down = function (x, y, obj) { isSlashing = true; lastSlashPoint.x = x; lastSlashPoint.y = y; slash.start(x, y); }; game.move = function (x, y, obj) { if (!isSlashing) { return; } // Only register movement if it's a significant distance var dx = x - lastSlashPoint.x; var dy = y - lastSlashPoint.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 20) { lastSlashPoint.x = x; lastSlashPoint.y = y; slash.addPoint(x, y); // Check for collisions with targets for (var i = targets.length - 1; i >= 0; i--) { var target = targets[i]; if (!target.slashed) { // Line segment collision detection with target var lineStart = slash.points[slash.points.length - 2]; var lineEnd = { x: x, y: y }; // Simple distance-based collision for this demo var midX = (lineStart.x + lineEnd.x) / 2; var midY = (lineStart.y + lineEnd.y) / 2; var targetDx = target.x - midX; var targetDy = target.y - midY; var targetDist = Math.sqrt(targetDx * targetDx + targetDy * targetDy); if (targetDist < target.graphic.width / 2) { var points = target.slice(); if (points === -1) { // Game over if (score > highScore) { highScore = score; storage.highScore = highScore; highScoreTxt.setText("Best: " + highScore); } LK.effects.flashScreen(0xff0000, 500); // Save current music state before stopping storage.musicMuted = false; LK.stopMusic(); // Stop music before game over LK.showGameOver(); return; } score += points; scoreTxt.setText("Score: " + score); LK.setScore(score); } } } } }; game.up = function (x, y, obj) { isSlashing = false; slash.end(); }; // Spawn a new target function spawnTarget() { var startX, startY, endX, endY; var side = Math.floor(Math.random() * 4); // 0: top, 1: right, 2: bottom, 3: left // Determine spawn position (off-screen) switch (side) { case 0: // Top startX = Math.random() * 2048; startY = -100; endX = Math.random() * 2048; endY = 2832; break; case 1: // Right startX = 2148; startY = Math.random() * 2732; endX = -100; endY = Math.random() * 2732; break; case 2: // Bottom startX = Math.random() * 2048; startY = 2832; endX = Math.random() * 2048; endY = -100; break; case 3: // Left startX = -100; startY = Math.random() * 2732; endX = 2148; endY = Math.random() * 2732; break; } // Calculate direction var dx = endX - startX; var dy = endY - startY; var dist = Math.sqrt(dx * dx + dy * dy); var dirX = dx / dist; var dirY = dy / dist; // Determine target type var targetType; var rand = Math.random(); if (rand < 0.1) { targetType = 'danger'; } else if (rand < 0.3) { targetType = 'special'; } else { targetType = 'normal'; } // Create and setup target var target = new Target(targetType); // Make danger targets move significantly faster var speedMultiplier = targetType === 'danger' ? 3 : 1; target.setup({ startX: startX, startY: startY, directionX: dirX, directionY: dirY, speed: (5 + Math.random() * 5 * difficulty) * speedMultiplier }); targets.push(target); game.addChild(target); } // Initialize the game function initGame() { // Stop any currently playing music first LK.stopMusic(); // Check if music was saved as muted in storage var musicMuted = storage.musicMuted === true; // Play the game music with a fade-in effect if not muted if (!musicMuted) { LK.playMusic('gameMusic', { fade: { start: 0, end: 0.7, duration: 1000 } }); } // Reset game variables targets = []; score = 0; difficulty = 1; isSlashing = false; // Update UI scoreTxt.setText("Score: 0"); highScoreTxt.setText("Best: " + highScore); LK.setScore(0); } // Main game update function game.update = function () { // Update all targets for (var i = targets.length - 1; i >= 0; i--) { var target = targets[i]; // If target is being destroyed, remove from array if (!target.parent) { targets.splice(i, 1); continue; } } // Update slash effect slash.update(); // Spawn new targets based on game tick and difficulty if (LK.ticks % Math.max(10, Math.floor(targetFrequency / difficulty)) === 0) { spawnTarget(); } // Increase difficulty over time if (LK.ticks % 300 === 0) { difficulty += 0.1; } }; // Initialize the game initGame(); // Make sure music is properly initialized on first load if (storage.musicMuted === undefined) { storage.musicMuted = false; } // Check if we need to restart music (after a reset) if (!storage.musicMuted) { LK.playMusic('gameMusic', { fade: { start: 0, end: 0.7, duration: 1000 } }); }
===================================================================
--- original.js
+++ change.js
@@ -131,8 +131,27 @@
}
self.x += self.directionX * self.speed;
self.y += self.directionY * self.speed;
self.rotation += self.rotationSpeed;
+ // Check for collision with other targets if this is a danger target
+ if (self.type === 'danger' && !self.slashed) {
+ for (var i = 0; i < targets.length; i++) {
+ var otherTarget = targets[i];
+ // Skip if checking against itself or already slashed targets
+ if (otherTarget === self || otherTarget.slashed || otherTarget.type === 'danger') {
+ continue;
+ }
+ // Simple distance-based collision detection
+ var dx = self.x - otherTarget.x;
+ var dy = self.y - otherTarget.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ // If targets are close enough (considering their size), trigger a collision
+ if (distance < (self.graphic.width / 2 + otherTarget.graphic.width / 2) * 0.8) {
+ // Trigger the other target's slice method
+ otherTarget.slice();
+ }
+ }
+ }
// Check if it's off-screen
if (self.x < -200 || self.x > 2248 || self.y < -200 || self.y > 2932) {
self.destroy();
}
corona virus. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
cancer entity piece on body. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
white blood cell. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows