User prompt
shield should be moves when player touches screen in any place not only on top of shield. however shield should always move from its current position
User prompt
take reference anywere where the player places his touch on screen, and from there move the shield. however, do not move shield to that point, just move it around from its current location considering the touch point is on top of the shield
User prompt
Please fix the bug: 'ReferenceError: rockObstacle is not defined' in or related to this line: 'if (self.intersects(rockObstacle)) {' Line Number: 154
User prompt
rock obstacles will only appear in the 20% of the side of the screen each
User prompt
add rockobstacle. rockobstacle will not move its position but obstacles will be pushed dy it
User prompt
player does not have to touch on the shield to move it. it can move if by touching anywhere in the screen. the spot the player touches will be the controller and take it as reference to move the shield in its current position.
User prompt
improvev physics to make obstacles push each other better
Code edit (5 edits merged)
Please save this source code
User prompt
make bubbles also have a very small sideways movement
Code edit (1 edits merged)
Please save this source code
User prompt
do not impact shape of bubbles only size or scale
User prompt
bubbles should be bigger or smaller randomly
User prompt
bubbles should have different sizes
User prompt
if bubbles is colliding with obstacles, bubble should be shown on top of the z axis
User prompt
bring bubbles to the topmost of z axis
User prompt
obstacles should push each other a little more
User prompt
background blue should get gradually darker
User prompt
obstacles should be behind bubbles
User prompt
add alpha to bubbles
User prompt
make bacgkorund blue softer
User prompt
make bacgkround ocean blue
User prompt
add bubbles that will move upwards from the bottom converting a sense of the player moving dowards
User prompt
add background images that will move upwards slowly conveying a feeling that the diver is going down
User prompt
add paralx scrolling on both sides of the screen. it will be continuous from down up
User prompt
put more backgrounds
/****
* Classes
****/
// Background class
var Background = Container.expand(function () {
var self = Container.call(this);
var backgroundGraphics = self.attachAsset('background', {
anchorX: 0.5,
anchorY: 0.5
});
// Set background speed
self.speed = -2;
// This is automatically called every game tick, if the background is attached!
self.update = function () {
// Move the background downwards
self.y += self.speed;
// Reset the position of the background when it reaches the end
if (self.y <= -2732) {
self.y = 2732;
}
};
});
// Diver class
var Diver = Container.expand(function () {
var self = Container.call(this);
var diverGraphics = self.attachAsset('diver', {
anchorX: 0.5,
anchorY: 0.5
});
// Add a sideways movement to the diver
self.movement = 0;
self.direction = 1;
self.update = function () {
self.movement += self.direction * 0.03;
if (self.movement > 0.5 || self.movement < -0.5) {
self.direction *= -1;
}
self.x += self.movement;
};
// Add flippers to the diver
var leftFlipper = self.addChild(new Flipper());
leftFlipper.x = -50;
leftFlipper.depth = -1;
var rightFlipper = self.addChild(new Flipper());
rightFlipper.x = 50;
rightFlipper.depth = -1;
});
// Flipper class
var Flipper = Container.expand(function () {
var self = Container.call(this);
var flipperGraphics = self.attachAsset('flippers', {
anchorX: 0.5,
anchorY: 1.0
});
// Set flipper movement
self.movement = 0;
self.direction = 1;
// This is automatically called every game tick, if the flipper is attached!
self.update = function () {
// Move the flipper subtly to simulate flipping
self.movement += self.direction * 0.03;
if (self.movement > 0.5 || self.movement < -0.5) {
self.direction *= -1;
}
self.rotation = self.movement;
};
});
// Obstacle1 class
var Obstacle1 = Container.expand(function () {
var self = Container.call(this);
var obstacle1Graphics = self.attachAsset('obstacle1', {
anchorX: 0.5,
anchorY: 0.5
});
// Set obstacle1 speed
self.speed = -5;
// This is automatically called every game tick, if the obstacle1 is attached!
self.update = function () {
// Check if the obstacle is colliding with the shield
if (self.intersects(shield)) {
// Calculate the direction vector between the shield and the obstacle
var dx = self.x - shield.x;
var dy = self.y - shield.y;
var distance = Math.sqrt(dx * dx + dy * dy);
// Normalize the direction vector
dx /= distance;
dy /= distance;
// Push the obstacle away from the shield
self.x += dx * 5;
self.y += dy * 5;
}
// Check for collision with diver
if (self.intersects(diver)) {
// Flash screen red for 1 second (1000ms) to show game over
LK.effects.flashScreen(0xff0000, 1000);
// Show game over. The game will be automatically paused while game over is showing.
LK.showGameOver();
}
// Continue moving upwards
self.y += self.speed;
self.rotation += 0.01; // Add small rotation to the obstacle
// Add size change to the obstacle
self.scale.x = 1 + Math.sin(LK.ticks / 10) * 0.02;
self.scale.y = 1 + Math.sin(LK.ticks / 10) * 0.02;
if (self.y < 0) {
self.destroy();
var index = obstacles.indexOf(self);
if (index > -1) {
obstacles.splice(index, 1);
}
}
// Check if the obstacle is colliding with another obstacle
for (var i = 0; i < obstacles.length; i++) {
var otherObstacle = obstacles[i];
if (self !== otherObstacle && self.intersects(otherObstacle)) {
// Calculate the direction vector between the two obstacles
var dx = self.x - otherObstacle.x;
var dy = self.y - otherObstacle.y;
var distance = Math.sqrt(dx * dx + dy * dy);
// Normalize the direction vector
dx /= distance;
dy /= distance;
// Push the obstacle away from the other obstacle
self.x += dx * 5;
self.y += dy * 5;
}
}
};
});
// Parallax Background class
var ParallaxBackground = Container.expand(function () {
var self = Container.call(this);
var backgroundGraphics = self.attachAsset('background', {
anchorX: 0.5,
anchorY: 0.5
});
// Set background speed
self.speed = -2;
// This is automatically called every game tick, if the background is attached!
self.update = function () {
// Move the backgrounds upwards
parallaxBackground1.y += parallaxBackground1.speed;
parallaxBackground2.y += parallaxBackground2.speed;
parallaxBackground3.y += parallaxBackground3.speed;
parallaxBackground4.y += parallaxBackground4.speed;
// Reset the position of the backgrounds when they reach the end
if (parallaxBackground1.y <= -2732) {
parallaxBackground1.y = parallaxBackground4.y + parallaxBackground4.height;
}
if (parallaxBackground2.y <= -2732) {
parallaxBackground2.y = parallaxBackground1.y + parallaxBackground1.height;
}
if (parallaxBackground3.y <= -2732) {
parallaxBackground3.y = parallaxBackground2.y + parallaxBackground2.height;
}
if (parallaxBackground4.y <= -2732) {
parallaxBackground4.y = parallaxBackground3.y + parallaxBackground3.height;
}
};
});
// Shield class
var Shield = Container.expand(function () {
var self = Container.call(this);
var shieldGraphics = self.attachAsset('shield', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
dragNode = self;
};
});
/****
* Initialize Game
****/
// Create a diver instance
//<Assets used in the game will automatically appear here>
var game = new LK.Game({
backgroundColor: 0xADD8E6 //Init game with light blue background
});
/****
* Game Code
****/
// Create multiple parallax background instances
var parallaxBackground1 = game.addChildAt(new ParallaxBackground(), 0);
var parallaxBackground2 = game.addChildAt(new ParallaxBackground(), 0);
var parallaxBackground3 = game.addChildAt(new ParallaxBackground(), 0);
var parallaxBackground4 = game.addChildAt(new ParallaxBackground(), 0);
// Position the backgrounds at the center of the screen
parallaxBackground1.x = 2048 / 2;
parallaxBackground1.y = 2732 / 2;
parallaxBackground2.x = 2048 / 2;
parallaxBackground2.y = 2732;
// Create a shield instance
var shield = game.addChildAt(new Shield(), game.children.length);
// Position the shield at the center of the screen
shield.x = 2048 / 2;
shield.y = 2732 / 2;
// Create a diver instance
var dragNode = null;
var diver = new Diver();
diver.depth = 2;
// Position the diver at the top center of the screen, 200 pixels down from the top
diver.x = 2048 / 2;
diver.y = 500;
// Position the flippers relative to the diver
diver.children[0].y = diver.height / 2 - 20; // Left flipper
diver.children[0].y = diver.children[0].y; // Right flipper
// Set diver to a higher depth than flippers
diver.depth = 2;
// Create an obstacle1 instance
game.move = function (x, y, obj) {
if (dragNode) {
dragNode.x = x;
dragNode.y = y;
}
};
var obstacles = [];
game.addChild(diver);
game.setChildIndex(diver, game.children.length - 1);
// Spawn the first wave of obstacles
spawnWave();
;
// Initialize score
var score = 0;
// Create score text
var scoreText = new Text2('Depth: 0m', {
size: 100,
fill: "#ffffff",
stroke: "#000000",
strokeThickness: 5
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Initialize a timer to update the score every second
var scoreUpdateInterval = LK.setInterval(function () {
score += 1;
if (scoreText) {
scoreText.setText('Depth: ' + score + 'm');
}
}, 2000);
game.up = function (x, y, obj) {
dragNode = null;
};
// Define the number of obstacles in each wave
var obstaclesPerWave = [2, 3, 4, 5, 6];
var currentWave = 0;
// Spawn wave function
function spawnWave() {
// Check if the previous wave is destroyed
if (obstacles && obstacles.length === 0) {
// Define the layout of the obstacles for each wave
var obstacleLayouts = [
// First wave: four obstacles forming a square
'square',
// Second wave: three obstacles forming a triangle
'triangle',
// Third wave: ten obstacles forming a circle
'circle'];
// Get the layout for the current wave
var layout = obstacleLayouts[currentWave];
// Define the positions for each layout
var positions = {
'square': [{
x: 2,
y: 2
}, {
x: 2,
y: 7
}, {
x: 7,
y: 2
}, {
x: 7,
y: 7
}],
'triangle': [{
x: 5,
y: 2
}, {
x: 2,
y: 7
}, {
x: 8,
y: 7
}],
'circle': [{
x: 5,
y: 2
}, {
x: 6,
y: 3
}, {
x: 7,
y: 4
}, {
x: 7,
y: 5
}, {
x: 6,
y: 6
}, {
x: 5,
y: 7
}, {
x: 4,
y: 6
}, {
x: 3,
y: 5
}, {
x: 3,
y: 4
}, {
x: 4,
y: 3
}]
};
// Get the positions for the current layout
var layoutPositions = positions[layout];
if (!layoutPositions) {
console.error('Error: layoutPositions is undefined. Check the layout variable and the positions object.');
return;
}
for (var i = 0; i < layoutPositions.length; i++) {
var obstacle = game.addChild(new Obstacle1());
// Position the obstacles according to the layout, using the grid for positioning
obstacle.x = 2048 / 2 + (layoutPositions[i].x - gridSize / 2) * cellSize;
obstacle.y = 2732 + layoutPositions[i].y * cellSize; // Spawn obstacles offscreen at the bottom
obstacles.push(obstacle);
}
currentWave++;
if (obstaclesPerWave && currentWave >= obstaclesPerWave.length) {
currentWave = 0;
}
}
}
// Define the grid size and the size of each cell in the grid
var gridSize = 10;
var cellSize = 50;
// Call the spawn wave function every 2 seconds
var spawnWaveInterval = LK.setInterval(spawnWave, 2000);
;
8bit. cartoon. jellyfish.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
empty 8 bit cartoon white circle. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon. 8-bit. octopus. colorful.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon. 8-bit. sea urchin. colorful. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon 8bit stingray. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.