User prompt
Ensure that not load more towerblock if the counter reach zero
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of null (reading 'swayDirection')' in or related to this line: 'var lastSwayDirection = currentBlock.swayDirection; // Save the sway direction of the current block' Line Number: 151
User prompt
And now why you stopping the loader movement at the side of the map? Fix it
User prompt
Avoid towerblock jumping and bouncing
User prompt
Speed up the towerblock loading horizontal movement by half
User prompt
Speed up the loading horizontal movement by half
User prompt
Please fix the bug: 'TypeError: LK.getMusic is not a function' in or related to this line: 'LK.getMusic('Birds').play();' Line Number: 237
User prompt
Play dove sound and birds sound at the same time in loop
User prompt
Please fix the bug: 'TypeError: LK.getMusic is not a function' in or related to this line: 'LK.getMusic('Birds').play();' Line Number: 241
User prompt
Play dove sound and birds sound alternately
User prompt
Play dove sound in loop
User prompt
Play dove sound loop in every 7 seconds
User prompt
Do it
User prompt
Randomize the birds movement, not only just one horizontal line
User prompt
Ensure all type of the the birds flying to the upper half of the map
User prompt
Ensure the birds flying to the upper half of the map
User prompt
Decrease the number of the bird asset to the half
User prompt
Ensure the dovebird movement from right to left direction
User prompt
Add dovebird asset to the map
User prompt
Add to the map a flying animated dove bird
User prompt
Do it
User prompt
Add Animated flying birds to the map
User prompt
Play birds sound in loop every 7 seconds
User prompt
Maintain the sway direction after dropping the block
User prompt
Avoid start from right when the loading movement is head to left
/**** * Classes ****/ // Class for Explosion var Explosion = Container.expand(function () { var self = Container.call(this); var explosionGraphics = self.attachAsset('explosion', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { explosionGraphics.alpha -= 0.01; // Fade out the explosion if (explosionGraphics.alpha <= 0) { self.destroy(); // Destroy the explosion when it's fully faded out } }; }); // Class for TowerBlock var TowerBlock = Container.expand(function () { var self = Container.call(this); var blockGraphics = self.attachAsset('towerBlock', { anchorX: 0.5, anchorY: 0.5 }); self.swayDirection = 1; self.swaySpeed = 1; self.update = function () { self.x += self.swaySpeed * self.swayDirection; if (self.x > 2048 - blockGraphics.width / 2 || self.x < blockGraphics.width / 2) { self.swayDirection *= -1; } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Light blue background }); /**** * Game Code ****/ var sky = game.addChild(LK.getAsset('sky', { anchorX: 0, anchorY: 0, x: 0, y: 0 })); var grass = game.addChild(LK.getAsset('grass', { anchorX: 0, anchorY: 1, x: 0, y: 2732 })); // Initialize variables var towerBlocks = []; var baseY = 2500; // Base row position var currentBlock = null; var counter = 20; // Initialize counter var counterTxt = new Text2('Remaining Building Blocks: ' + counter.toString(), { size: 37.5, fill: 0xFFFFFF }); // Create counter text counterTxt.anchor.set(0, 0); // Set anchor to top left LK.gui.topLeft.addChild(counterTxt); // Add counter text to top left corner of the map // Function to drop the current block function dropBlock() { if (currentBlock) { currentBlock.swaySpeed = 0; // Stop swaying towerBlocks.push(currentBlock); currentBlock = null; } } // Create a new block at the top of the screen function createNewBlock() { // Create a new block at the top of the screen function createNewBlock() { currentBlock = new TowerBlock(); currentBlock.x = 2048 / 2; currentBlock.y = 100; game.addChild(currentBlock); } currentBlock = new TowerBlock(); currentBlock.x = 2048 / 2; currentBlock.y = 100; game.addChild(currentBlock); } // Handle screen tap to drop the block game.down = function (x, y, obj) { var lastSwayDirection = currentBlock.swayDirection; // Save the sway direction of the current block dropBlock(); if (counter > 0) { // Check if counter is greater than zero createNewBlock(); currentBlock.x = towerBlocks[towerBlocks.length - 1].x; // Set the x position of the new block to the x position of the last block in the towerBlocks array currentBlock.swayDirection = lastSwayDirection; // Set the sway direction of the new block to the saved sway direction counter--; // Decrease counter by one counterTxt.setText('Remaining Building Blocks: ' + counter.toString()); // Update counter text } }; // Initialize the first block createNewBlock(); // Update function for the game game.update = function () { if (currentBlock) { currentBlock.update(); } // Update positions of all blocks for (var i = 0; i < towerBlocks.length; i++) { towerBlocks[i].y += 5; // Move blocks down // Check if the block has collided with the grass if (towerBlocks[i].intersects(grass)) { towerBlocks[i].y = grass.y - towerBlocks[i].height / 2; // Position the block on top of the grass towerBlocks[i].swaySpeed = 0; // Stop the block from moving } // Check if the block has collided with another block for (var j = 0; j < towerBlocks.length; j++) { if (i != j && towerBlocks[i].intersects(towerBlocks[j])) { towerBlocks[i].y = towerBlocks[j].y - towerBlocks[i].height; // Position the block on top of the other block towerBlocks[i].swaySpeed = 0; // Stop the block from moving // Initialize lastX for tracking changes on X if (towerBlocks[i].lastX === undefined) { towerBlocks[i].lastX = towerBlocks[i].x; } // Check if at least 90% of the tower block fits on the underlying one if (towerBlocks[j] && Math.abs(towerBlocks[i].x - towerBlocks[j].x) > towerBlocks[i].width * 0.1) { // If not, slide it off animatedly towerBlocks[i].x += towerBlocks[i].x < towerBlocks[j].x ? -5 : 5; // Check if the block has fallen off completely if (towerBlocks[i].lastX <= 0 && towerBlocks[i].x > 0) { // Create an explosion effect var explosion = new Explosion(); explosion.x = towerBlocks[i].x; explosion.y = towerBlocks[i].y; game.addChild(explosion); var explosion = LK.effects.explosion(towerBlocks[i].x, towerBlocks[i].y); game.addChild(explosion); towerBlocks[i].destroy(); // Remove the block from the game towerBlocks.splice(i, 1); // Remove the block from the array i--; // Adjust the index after removal i--; // Adjust the index after removal } else if (towerBlocks[i].y > 2732) { // Check if the block has fallen off the map towerBlocks[i].destroy(); // Remove the block from the game towerBlocks.splice(i, 1); // Remove the block from the array i--; // Adjust the index after removal } } // Update last known states towerBlocks[i].lastX = towerBlocks[i].x; break; // Prevent block from bouncing by breaking the loop once a collision is detected } } } // Create a windstorm effect every 5 seconds if (LK.ticks % 300 == 0) { for (var i = 0; i < towerBlocks.length; i++) { // If the block does not fit at least 90% of the way underneath, move it off the map if (towerBlocks[j] && Math.abs(towerBlocks[i].x - towerBlocks[j].x) > towerBlocks[i].width * 0.1) { towerBlocks[i].x += towerBlocks[i].x < towerBlocks[j].x ? -5 : 5; } } } };
===================================================================
--- original.js
+++ change.js
@@ -88,13 +88,15 @@
game.addChild(currentBlock);
}
// Handle screen tap to drop the block
game.down = function (x, y, obj) {
+ var lastSwayDirection = currentBlock.swayDirection; // Save the sway direction of the current block
dropBlock();
if (counter > 0) {
// Check if counter is greater than zero
createNewBlock();
currentBlock.x = towerBlocks[towerBlocks.length - 1].x; // Set the x position of the new block to the x position of the last block in the towerBlocks array
+ currentBlock.swayDirection = lastSwayDirection; // Set the sway direction of the new block to the saved sway direction
counter--; // Decrease counter by one
counterTxt.setText('Remaining Building Blocks: ' + counter.toString()); // Update counter text
}
};