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 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);
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);
target.setup({
startX: startX,
startY: startY,
directionX: dirX,
directionY: dirY,
speed: 5 + Math.random() * 5 * difficulty
});
targets.push(target);
game.addChild(target);
}
// Initialize the game
function initGame() {
LK.playMusic('gameMusic');
// 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(); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,347 @@
-/****
+/****
+* 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 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: 0x000000
-});
\ No newline at end of file
+ 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);
+ 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);
+ target.setup({
+ startX: startX,
+ startY: startY,
+ directionX: dirX,
+ directionY: dirY,
+ speed: 5 + Math.random() * 5 * difficulty
+ });
+ targets.push(target);
+ game.addChild(target);
+}
+// Initialize the game
+function initGame() {
+ LK.playMusic('gameMusic');
+ // 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();
\ No newline at end of file
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