User prompt
quiero un sonido cuando el personaje toca un enemigo
Code edit (1 edits merged)
Please save this source code
User prompt
Super Jump Quest
Initial prompt
Quiero un juego de plataformas estilo mario bros. el personaje se mueve en un mundo 2d. debera ir saltando sobre enemigos que aparecen, saltar sobre plataformas y llegar a la meta para pasar al siguiente nivel.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 2;
self.velocityY = 0;
self.gravity = 0.8;
self.isAlive = true;
self.direction = 1;
self.patrolDistance = 300;
self.startX = 0;
self.update = function () {
if (!self.isAlive) return;
// Apply gravity
self.velocityY += self.gravity;
// Move horizontally
self.x += self.velocityX * self.direction;
self.y += self.velocityY;
// Ground collision
if (self.y >= groundLevel - 30) {
self.y = groundLevel - 30;
self.velocityY = 0;
}
// Platform collision
for (var i = 0; i < platforms.length; i++) {
var platform = platforms[i];
if (self.intersects(platform) && self.velocityY > 0) {
var enemyBottom = self.y + 30;
var platformTop = platform.y - 20;
if (enemyBottom - self.velocityY <= platformTop) {
self.y = platformTop - 30;
self.velocityY = 0;
}
}
}
// Patrol behavior
if (Math.abs(self.x - self.startX) > self.patrolDistance) {
self.direction *= -1;
}
// Keep enemy in bounds
if (self.x < 30) {
self.x = 30;
self.direction = 1;
}
if (self.x > 2018) {
self.x = 2018;
self.direction = -1;
}
};
self.defeat = function () {
self.isAlive = false;
self.visible = false;
LK.getSound('enemyDefeat').play();
LK.setScore(LK.getScore() + 100);
scoreTxt.setText(LK.getScore());
};
return self;
});
var Goal = Container.expand(function () {
var self = Container.call(this);
var goalGraphics = self.attachAsset('goal', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Platform = Container.expand(function () {
var self = Container.call(this);
var platformGraphics = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.speed = 8;
self.jumpPower = 20;
self.gravity = 0.8;
self.isGrounded = false;
self.isJumping = false;
self.update = function () {
// Apply gravity
self.velocityY += self.gravity;
// Apply velocities
self.x += self.velocityX;
self.y += self.velocityY;
// Ground collision
if (self.y >= groundLevel - 40) {
self.y = groundLevel - 40;
self.velocityY = 0;
self.isGrounded = true;
self.isJumping = false;
}
// Platform collision
for (var i = 0; i < platforms.length; i++) {
var platform = platforms[i];
if (self.intersects(platform) && self.velocityY > 0) {
var playerBottom = self.y + 40;
var platformTop = platform.y - 20;
if (playerBottom - self.velocityY <= platformTop) {
self.y = platformTop - 40;
self.velocityY = 0;
self.isGrounded = true;
self.isJumping = false;
}
}
}
// Keep player in bounds
if (self.x < 40) self.x = 40;
if (self.x > 2008) self.x = 2008;
// Apply friction
self.velocityX *= 0.85;
};
self.jump = function () {
if (self.isGrounded) {
self.velocityY = -self.jumpPower;
self.isGrounded = false;
self.isJumping = true;
LK.getSound('jump').play();
}
};
self.moveLeft = function () {
self.velocityX = -self.speed;
};
self.moveRight = function () {
self.velocityX = self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var player;
var enemies = [];
var platforms = [];
var goal;
var currentLevel = 1;
var lives = 3;
var groundLevel = 2600;
var leftPressed = false;
var rightPressed = false;
var lastTouchX = 0;
var lastTouchY = 0;
// UI Elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 120;
scoreTxt.y = 50;
LK.gui.topLeft.addChild(scoreTxt);
var levelTxt = new Text2('Level: 1', {
size: 60,
fill: 0xFFFFFF
});
levelTxt.anchor.set(0.5, 0);
levelTxt.x = 0;
levelTxt.y = 50;
LK.gui.top.addChild(levelTxt);
var livesTxt = new Text2('Lives: 3', {
size: 60,
fill: 0xFFFFFF
});
livesTxt.anchor.set(1, 0);
livesTxt.x = -50;
livesTxt.y = 50;
LK.gui.topRight.addChild(livesTxt);
function createLevel(levelNum) {
// Clear existing level
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].destroy();
enemies.splice(i, 1);
}
for (var i = platforms.length - 1; i >= 0; i--) {
platforms[i].destroy();
platforms.splice(i, 1);
}
if (goal) {
goal.destroy();
goal = null;
}
// Create player if not exists
if (!player) {
player = game.addChild(new Player());
}
// Reset player position
player.x = 200;
player.y = groundLevel - 100;
player.velocityX = 0;
player.velocityY = 0;
// Create platforms based on level
var platformConfigs = [
// Level 1
[{
x: 600,
y: 2400
}, {
x: 1000,
y: 2200
}, {
x: 1400,
y: 2000
}, {
x: 1800,
y: 1800
}],
// Level 2
[{
x: 400,
y: 2400
}, {
x: 800,
y: 2100
}, {
x: 1200,
y: 2300
}, {
x: 1600,
y: 2000
}, {
x: 1900,
y: 1700
}],
// Level 3
[{
x: 300,
y: 2300
}, {
x: 600,
y: 2100
}, {
x: 900,
y: 2400
}, {
x: 1200,
y: 2000
}, {
x: 1500,
y: 1800
}, {
x: 1800,
y: 1600
}]];
var levelPlatforms = platformConfigs[Math.min(levelNum - 1, 2)];
for (var i = 0; i < levelPlatforms.length; i++) {
var platform = game.addChild(new Platform());
platform.x = levelPlatforms[i].x;
platform.y = levelPlatforms[i].y;
platforms.push(platform);
}
// Create enemies
var enemyCount = Math.min(levelNum + 1, 5);
for (var i = 0; i < enemyCount; i++) {
var enemy = game.addChild(new Enemy());
enemy.x = 400 + i * 400;
enemy.y = groundLevel - 100;
enemy.startX = enemy.x;
enemies.push(enemy);
}
// Create goal
goal = game.addChild(new Goal());
goal.x = 1900;
goal.y = groundLevel - 75;
// Update level display
levelTxt.setText('Level: ' + levelNum);
}
function nextLevel() {
currentLevel++;
LK.setScore(LK.getScore() + 500);
scoreTxt.setText(LK.getScore());
LK.getSound('levelComplete').play();
if (currentLevel > 10) {
LK.showYouWin();
} else {
createLevel(currentLevel);
}
}
function loseLife() {
lives--;
livesTxt.setText('Lives: ' + lives);
if (lives <= 0) {
LK.showGameOver();
} else {
// Reset player position
player.x = 200;
player.y = groundLevel - 100;
player.velocityX = 0;
player.velocityY = 0;
}
}
// Touch controls
game.down = function (x, y, obj) {
lastTouchX = x;
lastTouchY = y;
// Jump on tap
if (player) {
player.jump();
}
};
game.move = function (x, y, obj) {
if (!player) return;
var deltaX = x - lastTouchX;
// Movement based on drag direction
if (Math.abs(deltaX) > 20) {
if (deltaX > 0) {
rightPressed = true;
leftPressed = false;
} else {
leftPressed = true;
rightPressed = false;
}
}
lastTouchX = x;
lastTouchY = y;
};
game.up = function (x, y, obj) {
leftPressed = false;
rightPressed = false;
};
game.update = function () {
if (!player) return;
// Handle movement
if (leftPressed) {
player.moveLeft();
}
if (rightPressed) {
player.moveRight();
}
// Enemy collision detection
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
if (!enemy.isAlive) continue;
if (player.intersects(enemy)) {
// Check if player is jumping on enemy from above
if (player.velocityY > 0 && player.y < enemy.y - 10) {
enemy.defeat();
player.velocityY = -10; // Bounce effect
} else {
// Player touched enemy from side - lose life
LK.getSound('enemyHit').play();
loseLife();
return;
}
}
}
// Goal collision
if (goal && player.intersects(goal)) {
nextLevel();
}
// Fall off screen
if (player.y > 2800) {
loseLife();
}
};
// Initialize first level
createLevel(1); ===================================================================
--- original.js
+++ change.js
@@ -362,8 +362,9 @@
enemy.defeat();
player.velocityY = -10; // Bounce effect
} else {
// Player touched enemy from side - lose life
+ LK.getSound('enemyHit').play();
loseLife();
return;
}
}
un fuego. In-Game asset. 2d. High contrast. No shadows. un fuego. un fuego
un fuego con ojos y boca, de expresion enojado. In-Game asset. 2d. High contrast. No shadows
un castillo simple. In-Game asset. 2d. High contrast. No shadows. castillo simple
una nube. In-Game asset. 2d. High contrast. No shadows
fuego con alas, ojo y boca. In-Game asset. 2d. High contrast. No shadows
camino de tierra. In-Game asset. 2d. High contrast. No shadows
cielo con castillos y nubes de fondo, que se vea borroso. In-Game asset. 2d. High contrast. No shadows
un oyo de tierra con estacas puntiagudas, de aspecto amenazador. In-Game asset. 2d. High contrast. No shadows
un sol con la leyenda "1 UP". In-Game asset. 2d. High contrast. No shadows
un huevo de colores. In-Game asset. 2d. High contrast. No shadows. un huevo de colores
humo gris. In-Game asset. 2d. High contrast. No shadows
un muñeco con gorra y pantalones. In-Game asset. 2d. High contrast. No shadows