User prompt
Please fix the bug: 'Timeout.tick error: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'targetColorText.style.fill = textColors[currentColorTarget];' Line Number: 197
Code edit (1 edits merged)
Please save this source code
User prompt
Quick Color Challenge
Initial prompt
Oyuncu oyuna başladığında oyuna başla tuşuna tıkladığında oyun başlasın oyun 3 den geriye sayıp ekranda renkler çıksın ve oyun bir renk söylesin oyuncu oyunun söylediği renge 2 saniyede basamazsa oyun hızlı ol desin oyuncu yanlış renge tıkladığında ekranda yanlış yazısı çıksın eyer oyuncu doğru renge tıklarsa ekranda aferin yazısı çıksın ve oyuncu bölüm 2 ye geçsin ve oyun yine rastgele renk söyleyip oyuncu bilmeye çalışsın ve oyun böyle devam etsin
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0, currentLevel: 1 }); /**** * Classes ****/ var ColorObject = Container.expand(function (color) { var self = Container.call(this); var circleAsset = self.attachAsset(color + 'Circle', { anchorX: 0.5, anchorY: 0.5, scaleX: 1, scaleY: 1 }); self.colorName = color; self.down = function (x, y, obj) { if (game.gameState === 'playing') { game.checkSelection(self.colorName); } }; self.pulse = function () { tween(circleAsset, { scaleX: 1.2, scaleY: 1.2 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { tween(circleAsset, { scaleX: 1, scaleY: 1 }, { duration: 300, easing: tween.easeIn }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xF5F5F5 }); /**** * Game Code ****/ // Game settings and variables var level = storage.currentLevel || 1; var warnings = 0; var maxWarnings = 3; var score = 0; var highScore = storage.highScore || 0; var colorObjects = []; var currentColorTarget = ''; var roundTimer = null; var timeLimit = 2000; // 2 seconds per round var colors = ['red', 'blue', 'green', 'yellow']; var advancedColors = ['purple', 'orange']; var gameState = 'ready'; // ready, countdown, playing, paused, over // UI Elements var scoreText = new Text2('Score: 0', { size: 80, fill: 0x333333 }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var levelText = new Text2('Level: 1', { size: 80, fill: 0x333333 }); levelText.anchor.set(0, 0); LK.gui.topRight.addChild(levelText); levelText.x -= 300; var warningText = new Text2('Warnings: 0/' + maxWarnings, { size: 80, fill: 0x333333 }); warningText.anchor.set(1, 0); LK.gui.topLeft.addChild(warningText); warningText.x += 400; var messageText = new Text2('Tap to Start', { size: 120, fill: 0x333333 }); messageText.anchor.set(0.5, 0.5); LK.gui.center.addChild(messageText); var targetColorText = new Text2('', { size: 140, fill: 0x333333 }); targetColorText.anchor.set(0.5, 0); targetColorText.y = 250; LK.gui.top.addChild(targetColorText); // Game functions function startGame() { gameState = 'countdown'; messageText.setText('3'); LK.setTimeout(function () { messageText.setText('2'); }, 1000); LK.setTimeout(function () { messageText.setText('1'); }, 2000); LK.setTimeout(function () { messageText.setText('GO!'); LK.setTimeout(function () { messageText.setText(''); setupLevel(); gameState = 'playing'; startRound(); }, 500); }, 3000); LK.playMusic('bgmusic', { fade: { start: 0, end: 0.5, duration: 2000 } }); } function setupLevel() { // Clear existing color objects for (var i = 0; i < colorObjects.length; i++) { colorObjects[i].destroy(); } colorObjects = []; // Update level display levelText.setText('Level: ' + level); // Define available colors based on level var availableColors = colors.slice(0); if (level > 3) { availableColors.push(advancedColors[0]); } if (level > 6) { availableColors.push(advancedColors[1]); } // Calculate positions for color objects var numColors = availableColors.length; var spacing = 2048 / (numColors + 1); var yPosition = 2732 / 2; // Create color objects for (var i = 0; i < numColors; i++) { var colorObj = new ColorObject(availableColors[i]); colorObj.x = spacing * (i + 1); colorObj.y = yPosition; game.addChild(colorObj); colorObjects.push(colorObj); } } function startRound() { // Select a random color from the available ones var availableColors = colors.slice(0); if (level > 3) { availableColors.push(advancedColors[0]); } if (level > 6) { availableColors.push(advancedColors[1]); } var randomIndex = Math.floor(Math.random() * availableColors.length); currentColorTarget = availableColors[randomIndex]; // Display the target color name targetColorText.setText(currentColorTarget.toUpperCase()); // Set text color (make it different from the actual color to add difficulty) var textColors = { 'red': '#0000FF', 'blue': '#FF0000', 'green': '#FFA500', 'yellow': '#800080', 'purple': '#00FF00', 'orange': '#0000FF' }; targetColorText.setText(targetColorText.text, { fill: textColors[currentColorTarget] }); // Start the timer roundTimer = LK.setTimeout(function () { addWarning("Time's up!"); }, timeLimit - level * 100); // Reduce time for higher levels } function checkSelection(selectedColor) { LK.clearTimeout(roundTimer); if (selectedColor === currentColorTarget) { handleCorrectSelection(); } else { handleIncorrectSelection(); } } function handleCorrectSelection() { LK.getSound('correct').play(); // Pulse the correct color object for (var i = 0; i < colorObjects.length; i++) { if (colorObjects[i].colorName === currentColorTarget) { colorObjects[i].pulse(); break; } } // Update score score += level * 10; scoreText.setText('Score: ' + score); // Show message messageText.setText('Correct!'); LK.setTimeout(function () { messageText.setText(''); // Check for level advancement if (score >= level * 50) { levelUp(); } else { startRound(); } }, 800); } function handleIncorrectSelection() { LK.getSound('wrong').play(); addWarning("Wrong color!"); } function addWarning(message) { warnings++; warningText.setText('Warnings: ' + warnings + '/' + maxWarnings); // Flash the screen red LK.effects.flashScreen(0xFF0000, 500); // Show message messageText.setText(message); if (warnings >= maxWarnings) { gameOver(); } else { LK.setTimeout(function () { messageText.setText(''); startRound(); }, 1000); } } function levelUp() { LK.getSound('levelUp').play(); level++; // Save current level storage.currentLevel = level; // Show level up message messageText.setText('Level Up!'); // Update level display levelText.setText('Level: ' + level); LK.setTimeout(function () { messageText.setText(''); setupLevel(); startRound(); }, 1500); } function gameOver() { gameState = 'over'; // Update high score if needed if (score > highScore) { highScore = score; storage.highScore = highScore; } // Show game over LK.showGameOver(); } // Event handlers game.down = function (x, y, obj) { if (gameState === 'ready') { startGame(); } }; // Update function game.update = function () { // Background pulsing for the target text (subtle effect) if (gameState === 'playing' && LK.ticks % 30 === 0) { tween(targetColorText, { scale: 1.1 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { tween(targetColorText, { scale: 1 }, { duration: 300, easing: tween.easeIn }); } }); } }; // Initialize the game scoreText.setText('Score: ' + score); levelText.setText('Level: ' + level); warningText.setText('Warnings: ' + warnings + '/' + maxWarnings);
===================================================================
--- original.js
+++ change.js
@@ -179,9 +179,11 @@
'yellow': '#800080',
'purple': '#00FF00',
'orange': '#0000FF'
};
- targetColorText.style.fill = textColors[currentColorTarget];
+ targetColorText.setText(targetColorText.text, {
+ fill: textColors[currentColorTarget]
+ });
// Start the timer
roundTimer = LK.setTimeout(function () {
addWarning("Time's up!");
}, timeLimit - level * 100); // Reduce time for higher levels