User prompt
Please fix the bug: 'Uncaught TypeError: LK.setGameOverScore is not a function' in or related to this line: 'LK.setGameOverScore(score);' Line Number: 276
User prompt
The score should be displayed on the losing or winning screen at the end of the game.
User prompt
Score should be displayed at the end of the game
User prompt
add score
User prompt
add background asset
User prompt
Let it be the background of the game asset
User prompt
Let it be the background of the game
User prompt
choose video type
User prompt
Let's have a better game
Code edit (1 edits merged)
Please save this source code
User prompt
YouTuber Simulator: Viral Star
Initial prompt
YouTuber Simulator game
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Energy Bar var EnergyBar = Container.expand(function () { var self = Container.call(this); var bg = self.attachAsset('energyBarBG', { anchorX: 0, anchorY: 0.5 }); var fg = self.attachAsset('energyBarFG', { anchorX: 0, anchorY: 0.5, x: 5, y: 0 }); self.fg = fg; self.set = function (percent) { if (percent < 0) percent = 0; if (percent > 1) percent = 1; fg.scaleX = percent; }; return self; }); // Rest Button var RestButton = Container.expand(function () { var self = Container.call(this); var btn = self.attachAsset('restBtn', { anchorX: 0.5, anchorY: 0.5 }); var txt = new Text2('REST', { size: 50, fill: "#fff" }); txt.anchor.set(0.5, 0.5); txt.x = 0; txt.y = 0; self.addChild(txt); return self; }); // Upgrade Button var UpgradeButton = Container.expand(function () { var self = Container.call(this); var btn = self.attachAsset('upgradeBtn', { anchorX: 0.5, anchorY: 0.5 }); var txt = new Text2('UPGRADE', { size: 50, fill: "#fff" }); txt.anchor.set(0.5, 0.5); txt.x = 0; txt.y = 0; self.addChild(txt); return self; }); // Video Button (Tap to create video) var VideoButton = Container.expand(function () { var self = Container.call(this); var btn = self.attachAsset('videoBtn', { anchorX: 0.5, anchorY: 0.5 }); // Text label var txt = new Text2('CREATE VIDEO', { size: 70, fill: "#fff" }); txt.anchor.set(0.5, 0.5); txt.x = 0; txt.y = 0; self.addChild(txt); // Animate on tap self.flash = function () { tween(self, { scaleX: 1.1, scaleY: 1.1 }, { duration: 80, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 80, easing: tween.easeIn }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181818 }); /**** * Game Code ****/ // Timer Icon // Subscriber Icon // Rest Button // Upgrade Button // Energy Bar FG // Energy Bar BG // Video Button (big tap area) // --- GAME CONSTANTS --- var GAME_WIDTH = 2048; var GAME_HEIGHT = 2732; var SUB_GOAL = 10000; // Win at 10,000 subscribers var GAME_TIME = 60; // seconds // --- GAME STATE --- var subscribers = 0; var views = 0; var score = 0; // New: score variable var energy = 1; // 0-1 var maxEnergy = 1; var energyPerTap = 0.08; var energyRegen = 0.12; // per rest tap var videoBaseSubs = 10; var videoBaseViews = 100; var upgradeLevel = 1; var upgradeCost = 100; var upgradeSubsBonus = 1.5; var upgradeViewsBonus = 1.5; var timeLeft = GAME_TIME; var isResting = false; var lastTick = 0; // --- UI ELEMENTS --- // Score display var scoreTxt = new Text2('Score: 0', { size: 90, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); scoreTxt.x = GAME_WIDTH / 2; scoreTxt.y = 40; // Subscribers display var subIcon = LK.getAsset('subIcon', { anchorX: 0, anchorY: 0.5, x: 120, y: 120 }); var subTxt = new Text2('0', { size: 90, fill: "#fff" }); subTxt.anchor.set(0, 0.5); subTxt.x = 220; subTxt.y = 120; // Timer display var timerIcon = LK.getAsset('timerIcon', { anchorX: 0, anchorY: 0.5, x: 120, y: 250 }); var timerTxt = new Text2('60', { size: 90, fill: "#fff" }); timerTxt.anchor.set(0, 0.5); timerTxt.x = 220; timerTxt.y = 250; // Energy bar var energyBar = new EnergyBar(); energyBar.x = (GAME_WIDTH - 600) / 2; energyBar.y = 400; // Video Button var videoBtn = new VideoButton(); videoBtn.x = GAME_WIDTH / 2; videoBtn.y = 800; // Upgrade Button var upgradeBtn = new UpgradeButton(); upgradeBtn.x = GAME_WIDTH / 2 + 350; upgradeBtn.y = 1200; // Rest Button var restBtn = new RestButton(); restBtn.x = GAME_WIDTH / 2 - 350; restBtn.y = 1200; // Upgrade cost text var upgradeCostTxt = new Text2('Cost: 100 views', { size: 40, fill: "#222" }); upgradeCostTxt.anchor.set(0.5, 0); upgradeCostTxt.x = upgradeBtn.x; upgradeCostTxt.y = upgradeBtn.y + 90; // Views display var viewsTxt = new Text2('Views: 0', { size: 60, fill: "#fff" }); viewsTxt.anchor.set(0.5, 0); viewsTxt.x = GAME_WIDTH / 2; viewsTxt.y = 600; // --- ADD TO GAME --- // Add background first so it's behind everything var bg = LK.getAsset('bg', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); game.addChild(bg); // Score text is not added to game during gameplay; will be shown at end of game game.addChild(subIcon); game.addChild(subTxt); game.addChild(timerIcon); game.addChild(timerTxt); game.addChild(energyBar); game.addChild(videoBtn); game.addChild(upgradeBtn); game.addChild(restBtn); game.addChild(upgradeCostTxt); game.addChild(viewsTxt); // --- GUI (for win/lose overlays, not used for main UI) --- // --- GAME LOGIC --- // Update all UI function updateUI() { scoreTxt.setText('Score: ' + score); subTxt.setText(subscribers + ''); timerTxt.setText(Math.ceil(timeLeft) + ''); energyBar.set(energy); viewsTxt.setText('Views: ' + views); upgradeCostTxt.setText('Cost: ' + upgradeCost + ' views'); } // Handle video creation tap videoBtn.down = function (x, y, obj) { if (energy < energyPerTap || isResting) return; // Animate videoBtn.flash(); // Calculate gain var subGain = Math.floor(videoBaseSubs * Math.pow(upgradeSubsBonus, upgradeLevel - 1)); var viewGain = Math.floor(videoBaseViews * Math.pow(upgradeViewsBonus, upgradeLevel - 1)); subscribers += subGain; views += viewGain; score += subGain; // Increase score by gained subscribers energy -= energyPerTap; if (energy < 0) energy = 0; // Win check if (subscribers >= SUB_GOAL) { // Show score in center before win popup scoreTxt.x = GAME_WIDTH / 2; scoreTxt.y = GAME_HEIGHT / 2 - 100; scoreTxt.anchor.set(0.5, 0.5); scoreTxt.setText('Final Score: ' + score); if (!scoreTxt.parent) game.addChild(scoreTxt); // Show win after a short delay so score is visible LK.setTimeout(function () { LK.showYouWin(); }, 1200); return; } updateUI(); }; // Handle upgrade tap upgradeBtn.down = function (x, y, obj) { if (views >= upgradeCost) { views -= upgradeCost; upgradeLevel += 1; upgradeCost = Math.floor(upgradeCost * 2.2); updateUI(); // Animate tween(upgradeBtn, { scaleX: 1.12, scaleY: 1.12 }, { duration: 90, onFinish: function onFinish() { tween(upgradeBtn, { scaleX: 1, scaleY: 1 }, { duration: 90 }); } }); } }; // Handle rest tap restBtn.down = function (x, y, obj) { if (energy >= 1) return; isResting = true; // Animate tween(restBtn, { scaleX: 1.12, scaleY: 1.12 }, { duration: 90, onFinish: function onFinish() { tween(restBtn, { scaleX: 1, scaleY: 1 }, { duration: 90 }); } }); // Regen energy energy += energyRegen; if (energy > 1) energy = 1; updateUI(); // Resting disables video tap for a short time LK.setTimeout(function () { isResting = false; }, 300); }; // --- GAME TIMER --- game.update = function () { // Timer if (timeLeft > 0) { var now = LK.ticks / 60; if (lastTick === 0) lastTick = now; var dt = now - lastTick; lastTick = now; timeLeft -= dt; if (timeLeft <= 0) { timeLeft = 0; // Show score in center before game over popup scoreTxt.x = GAME_WIDTH / 2; scoreTxt.y = GAME_HEIGHT / 2 - 100; scoreTxt.anchor.set(0.5, 0.5); scoreTxt.setText('Final Score: ' + score); if (!scoreTxt.parent) game.addChild(scoreTxt); // Show game over after a short delay so score is visible LK.setTimeout(function () { LK.showGameOver(); }, 1200); return; } } updateUI(); }; // --- INITIALIZE UI --- updateUI();
===================================================================
--- original.js
+++ change.js
@@ -215,9 +215,9 @@
x: 0,
y: 0
});
game.addChild(bg);
-game.addChild(scoreTxt);
+// Score text is not added to game during gameplay; will be shown at end of game
game.addChild(subIcon);
game.addChild(subTxt);
game.addChild(timerIcon);
game.addChild(timerTxt);
@@ -252,9 +252,18 @@
energy -= energyPerTap;
if (energy < 0) energy = 0;
// Win check
if (subscribers >= SUB_GOAL) {
- LK.showYouWin();
+ // Show score in center before win popup
+ scoreTxt.x = GAME_WIDTH / 2;
+ scoreTxt.y = GAME_HEIGHT / 2 - 100;
+ scoreTxt.anchor.set(0.5, 0.5);
+ scoreTxt.setText('Final Score: ' + score);
+ if (!scoreTxt.parent) game.addChild(scoreTxt);
+ // Show win after a short delay so score is visible
+ LK.setTimeout(function () {
+ LK.showYouWin();
+ }, 1200);
return;
}
updateUI();
};
@@ -320,10 +329,18 @@
lastTick = now;
timeLeft -= dt;
if (timeLeft <= 0) {
timeLeft = 0;
- // Lose
- LK.showGameOver();
+ // Show score in center before game over popup
+ scoreTxt.x = GAME_WIDTH / 2;
+ scoreTxt.y = GAME_HEIGHT / 2 - 100;
+ scoreTxt.anchor.set(0.5, 0.5);
+ scoreTxt.setText('Final Score: ' + score);
+ if (!scoreTxt.parent) game.addChild(scoreTxt);
+ // Show game over after a short delay so score is visible
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 1200);
return;
}
}
updateUI();