User prompt
Remove the guy who throws bombs and add a vibrant animated background ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Make the background a guy who throws bombs at you ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Make a animated background ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Make items move faster based on their rarity
User prompt
Add a animation for when you click a good item ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Remove new animations
User prompt
Add some animations and polish everything ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Get rid of the holdable item
User prompt
Add a good item which you hold down
User prompt
Make the spikes light grey
User prompt
Make the spikes look like grey balls with spikes around them
User prompt
Add some sound effects
User prompt
Space the orbs out a bit more when the score gets higher
User prompt
Add one more difficulty named insane which has more spawning and it is faster
User prompt
Make the good items a bit smaller
User prompt
Give the good items bigger hitboxes
User prompt
Make the good items look like magical orbs and the better they are the better aura they have
User prompt
Make the items look better
User prompt
Add a difficulty menu
User prompt
Remove everything about pop
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Make popping objects work
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var pop = LK.getAsset('pop', {' Line Number: 60
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Item class for all falling items var Item = Container.expand(function () { var self = Container.call(this); // Asset id and score are set on creation self.assetId = 'item_basic'; self.scoreValue = 1; self.isBad = false; // true for bomb/spike self.isTapped = false; // Attach asset var itemGfx = self.attachAsset(self.assetId, { anchorX: 0.5, anchorY: 0.5 }); // For pop effect self.popEffect = null; // Set up item visuals self.setType = function (type) { // type: {assetId, scoreValue, isBad} self.assetId = type.assetId; self.scoreValue = type.scoreValue; self.isBad = type.isBad; // Remove old asset if any if (itemGfx && itemGfx.parent) itemGfx.parent.removeChild(itemGfx); itemGfx = self.attachAsset(self.assetId, { anchorX: 0.5, anchorY: 0.5 }); // For bomb/spike, add a little rotation if (self.isBad) { itemGfx.rotation = Math.PI / 8 * (Math.random() > 0.5 ? 1 : -1); } }; // Animate pop effect self.showPop = function () { var pop = LK.getAsset('pop', { anchorX: 0.5, anchorY: 0.5 }); pop.alpha = 0.7; pop.scaleX = 0.5; pop.scaleY = 0.5; self.addChild(pop); tween(pop, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, { duration: 350, easing: tween.easeOut, onFinish: function onFinish() { if (pop.parent) pop.parent.removeChild(pop); } }); }; // Called when tapped self.onTap = function () { if (self.isTapped) return; self.isTapped = true; if (self.isBad) { self.showPop(); } else { self.showPop(); } }; // Called every tick self.update = function () { // Movement handled in game loop }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181818 }); /**** * Game Code ****/ // Music // Sounds // Pop effect // Bad items // Good items // Item types var ITEM_TYPES = [{ assetId: 'item_basic', scoreValue: 1, isBad: false, weight: 60 }, { assetId: 'item_rare', scoreValue: 3, isBad: false, weight: 20 }, { assetId: 'item_legend', scoreValue: 7, isBad: false, weight: 5 }, { assetId: 'item_bomb', scoreValue: 0, isBad: true, weight: 10 }, { assetId: 'item_spike', scoreValue: 0, isBad: true, weight: 5 }]; // Weighted random selection function pickItemType() { var total = 0; for (var i = 0; i < ITEM_TYPES.length; i++) total += ITEM_TYPES[i].weight; var r = Math.random() * total; var acc = 0; for (var i = 0; i < ITEM_TYPES.length; i++) { acc += ITEM_TYPES[i].weight; if (r < acc) return ITEM_TYPES[i]; } return ITEM_TYPES[0]; } // Game state var items = []; var lives = 3; var score = 0; var spawnInterval = 1000; // ms var minSpawnInterval = 350; var spawnTimer = null; var itemFallSpeed = 7; // px per frame var itemSpeedInc = 0.15; var itemSpawnDec = 30; var lastTapTime = 0; // GUI var scoreTxt = new Text2('0', { size: 120, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var livesTxt = new Text2('♥♥♥', { size: 90, fill: 0xFF5252 }); livesTxt.anchor.set(1, 0); livesTxt.x = -40; // right padding LK.gui.topRight.addChild(livesTxt); // Prevent elements in top left 100x100 // (No elements added to gui.topLeft or at (0,0)) // Music LK.playMusic('bgmusic'); // Spawn a new item function spawnItem() { var type = pickItemType(); var item = new Item(); item.setType(type); // Random X, avoid edges var margin = 120; var x = margin + Math.random() * (2048 - 2 * margin); item.x = x; item.y = -100; // For touch detection item.width = LK.getAsset(type.assetId, { anchorX: 0.5, anchorY: 0.5 }).width; item.height = LK.getAsset(type.assetId, { anchorX: 0.5, anchorY: 0.5 }).height; // Add to game game.addChild(item); items.push(item); } // Update lives display function updateLives() { var s = ''; for (var i = 0; i < lives; i++) s += '♥'; livesTxt.setText(s); } // Handle tap function handleTap(x, y, obj) { // Find topmost item under tap for (var i = items.length - 1; i >= 0; i--) { var item = items[i]; // Simple bounding box check var dx = x - item.x; var dy = y - item.y; var w = item.width / 2; var h = item.height / 2; if (dx * dx / (w * w) + dy * dy / (h * h) <= 1.1) { // Tapped this item if (item.isTapped) continue; item.onTap(); if (item.isBad) { // Lose a life lives--; updateLives(); LK.getSound('bad').play(); LK.effects.flashScreen(0xff0000, 350); if (lives <= 0) { LK.getSound('lose').play(); LK.showGameOver(); return; } } else { // Score! score += item.scoreValue; LK.setScore(score); scoreTxt.setText(score); LK.getSound('score').play(); // Animate item tween(item, { scaleX: 1.3, scaleY: 1.3, alpha: 0 }, { duration: 220, easing: tween.easeOut, onFinish: function onFinish() { if (item.parent) item.parent.removeChild(item); } }); } // Remove item from array items.splice(i, 1); break; } } } // Game move/tap handler game.down = function (x, y, obj) { handleTap(x, y, obj); }; // Main update loop game.update = function () { // Move items for (var i = items.length - 1; i >= 0; i--) { var item = items[i]; item.y += itemFallSpeed; // If not tapped and off screen if (!item.isTapped && item.y > 2732 + 100) { // If good item missed, lose a life if (!item.isBad) { lives--; updateLives(); LK.getSound('life').play(); LK.effects.flashScreen(0xff9800, 250); if (lives <= 0) { LK.getSound('lose').play(); LK.showGameOver(); return; } } // Remove from game if (item.parent) item.parent.removeChild(item); items.splice(i, 1); } } // Difficulty ramp: every 10 points, increase speed and spawn rate var level = Math.floor(score / 10); var targetSpeed = 7 + level * itemSpeedInc; if (itemFallSpeed < targetSpeed) itemFallSpeed += 0.02; var targetInterval = Math.max(minSpawnInterval, 1000 - level * itemSpawnDec); if (spawnInterval > targetInterval) spawnInterval -= 1.5; }; // Spawn timer function startSpawnTimer() { if (spawnTimer) LK.clearInterval(spawnTimer); spawnTimer = LK.setInterval(function () { spawnItem(); // Adjust interval LK.clearInterval(spawnTimer); startSpawnTimer(); }, spawnInterval); } startSpawnTimer(); // Reset on game over LK.on('gameover', function () { // Clean up for (var i = 0; i < items.length; i++) { if (items[i].parent) items[i].parent.removeChild(items[i]); } items = []; lives = 3; score = 0; spawnInterval = 1000; itemFallSpeed = 7; updateLives(); scoreTxt.setText(score); startSpawnTimer(); LK.playMusic('bgmusic'); }); // Reset on win (not used, but for completeness) LK.on('youwin', function () { for (var i = 0; i < items.length; i++) { if (items[i].parent) items[i].parent.removeChild(items[i]); } items = []; lives = 3; score = 0; spawnInterval = 1000; itemFallSpeed = 7; updateLives(); scoreTxt.setText(score); startSpawnTimer(); LK.playMusic('bgmusic'); });
===================================================================
--- original.js
+++ change.js
@@ -44,9 +44,10 @@
anchorX: 0.5,
anchorY: 0.5
});
pop.alpha = 0.7;
- pop.scaleX = pop.scaleY = 0.5;
+ pop.scaleX = 0.5;
+ pop.scaleY = 0.5;
self.addChild(pop);
tween(pop, {
scaleX: 1.5,
scaleY: 1.5,