User prompt
Please fix the bug: 'Timeout.tick error: undefined is not an object (evaluating 'labelText.style.fill = "#ffffff"')' in or related to this line: 'labelText.style.fill = "#ffffff";' Line Number: 237
Code edit (1 edits merged)
Please save this source code
User prompt
Where's Ginger? Hidden Object Adventure
Initial prompt
Toca hide and seek (2014-2018). Have you seen ginger 🐱. Have you seen her in level 1 safari, level 2 train, level 3 snow, level 4 kids bedroom, or level 5 banana land. Tap on a level to get started, tap on ginger 🐱 when you spot her.
/**** * Plugins ****/ var storage = LK.import("@upit/storage.v1", { unlockedLevel: 1 }); var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var GameLevel = Container.expand(function (levelNumber) { var self = Container.call(this); self.levelNumber = levelNumber; self.gingerFound = false; var backgroundAsset = ''; var gingerX = 0; var gingerY = 0; switch (levelNumber) { case 1: // Safari backgroundAsset = 'safariBackground'; gingerX = 400 + Math.random() * 800; gingerY = 600 + Math.random() * 800; break; case 2: // Train backgroundAsset = 'trainBackground'; gingerX = 500 + Math.random() * 700; gingerY = 700 + Math.random() * 600; break; case 3: // Snow backgroundAsset = 'snowBackground'; gingerX = 600 + Math.random() * 600; gingerY = 800 + Math.random() * 500; break; case 4: // Kids Bedroom backgroundAsset = 'bedroomBackground'; gingerX = 700 + Math.random() * 500; gingerY = 900 + Math.random() * 400; break; case 5: // Banana Land backgroundAsset = 'bananaBackground'; gingerX = 800 + Math.random() * 400; gingerY = 1000 + Math.random() * 300; break; } var background = self.attachAsset(backgroundAsset, { anchorX: 0, anchorY: 0 }); self.createSceneObjects = function () { if (levelNumber === 1) { // Safari for (var i = 0; i < 8; i++) { var tree = self.addChild(LK.getAsset('tree', { anchorX: 0.5, anchorY: 1 })); tree.x = 200 + Math.random() * 1600; tree.y = 400 + Math.random() * 1800; } for (var i = 0; i < 12; i++) { var rock = self.addChild(LK.getAsset('rock', { anchorX: 0.5, anchorY: 0.5 })); rock.x = 100 + Math.random() * 1800; rock.y = 300 + Math.random() * 2000; } for (var i = 0; i < 10; i++) { var bush = self.addChild(LK.getAsset('bush', { anchorX: 0.5, anchorY: 0.5 })); bush.x = 150 + Math.random() * 1700; bush.y = 400 + Math.random() * 1900; } } else if (levelNumber === 2) { // Train for (var i = 0; i < 6; i++) { var trainCar = self.addChild(LK.getAsset('trainCar', { anchorX: 0.5, anchorY: 0.5 })); trainCar.x = 300 + i * 250; trainCar.y = 800 + Math.random() * 400; var wheel1 = self.addChild(LK.getAsset('wheel', { anchorX: 0.5, anchorY: 0.5 })); wheel1.x = trainCar.x - 60; wheel1.y = trainCar.y + 70; var wheel2 = self.addChild(LK.getAsset('wheel', { anchorX: 0.5, anchorY: 0.5 })); wheel2.x = trainCar.x + 60; wheel2.y = trainCar.y + 70; } } else if (levelNumber === 3) { // Snow for (var i = 0; i < 8; i++) { var snowman = self.addChild(LK.getAsset('snowman', { anchorX: 0.5, anchorY: 1 })); snowman.x = 200 + Math.random() * 1600; snowman.y = 500 + Math.random() * 1800; } for (var i = 0; i < 15; i++) { var rock = self.addChild(LK.getAsset('rock', { anchorX: 0.5, anchorY: 0.5 })); rock.x = 100 + Math.random() * 1800; rock.y = 400 + Math.random() * 2000; } } else if (levelNumber === 4) { // Kids Bedroom for (var i = 0; i < 4; i++) { var bed = self.addChild(LK.getAsset('bed', { anchorX: 0.5, anchorY: 0.5 })); bed.x = 300 + i * 400; bed.y = 600 + Math.random() * 800; } for (var i = 0; i < 20; i++) { var toy = self.addChild(LK.getAsset('toy', { anchorX: 0.5, anchorY: 0.5 })); toy.x = 150 + Math.random() * 1700; toy.y = 400 + Math.random() * 2000; } } else if (levelNumber === 5) { // Banana Land for (var i = 0; i < 50; i++) { var banana = self.addChild(LK.getAsset('banana', { anchorX: 0.5, anchorY: 0.5 })); banana.x = 100 + Math.random() * 1800; banana.y = 300 + Math.random() * 2100; } } }; self.createSceneObjects(); var gingerSprite = self.addChild(LK.getAsset('ginger', { anchorX: 0.5, anchorY: 0.5 })); gingerSprite.x = gingerX; gingerSprite.y = gingerY; gingerSprite.down = function (x, y, obj) { if (!self.gingerFound) { self.gingerFound = true; LK.getSound('found').play(); tween(gingerSprite, { scaleX: 1.5, scaleY: 1.5 }, { duration: 300 }); LK.effects.flashObject(gingerSprite, 0x00ff00, 500); LK.setTimeout(function () { var nextLevel = levelNumber + 1; if (nextLevel <= 5) { storage.unlockedLevel = Math.max(storage.unlockedLevel, nextLevel); levelButtons[nextLevel - 1].unlock(); } if (nextLevel <= 5) { currentLevel = nextLevel; showGameplay(); } else { LK.showYouWin(); } }, 1000); } }; return self; }); var LevelButton = Container.expand(function (levelNumber, levelName, isLocked) { var self = Container.call(this); var buttonGraphics = self.attachAsset(isLocked ? 'lockedButton' : 'levelButton', { anchorX: 0.5, anchorY: 0.5 }); var labelText = new Text2(levelName, { size: 40, fill: isLocked ? "#666666" : "#ffffff" }); labelText.anchor.set(0.5, 0.5); self.addChild(labelText); self.levelNumber = levelNumber; self.isLocked = isLocked; self.down = function (x, y, obj) { if (!self.isLocked) { currentLevel = self.levelNumber; showGameplay(); } }; self.unlock = function () { self.isLocked = false; buttonGraphics.destroy(); var newButton = self.attachAsset('levelButton', { anchorX: 0.5, anchorY: 0.5 }); labelText.style.fill = "#ffffff"; LK.getSound('unlock').play(); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87ceeb }); /**** * Game Code ****/ var currentScreen = 'menu'; // 'menu' or 'gameplay' var currentLevel = 1; var levelButtons = []; var currentGameLevel = null; var titleText = new Text2("Where's Ginger?", { size: 80, fill: 0x2C3E50 }); titleText.anchor.set(0.5, 0.5); titleText.x = 1024; titleText.y = 300; game.addChild(titleText); var subtitleText = new Text2("Find Ginger hiding in each scene!", { size: 40, fill: 0x34495E }); subtitleText.anchor.set(0.5, 0.5); subtitleText.x = 1024; subtitleText.y = 400; game.addChild(subtitleText); var levelNames = ['Safari', 'Train', 'Snow', 'Kids Bedroom', 'Banana Land']; for (var i = 0; i < 5; i++) { var isLocked = i + 1 > storage.unlockedLevel; var button = new LevelButton(i + 1, levelNames[i], isLocked); button.x = 1024; button.y = 600 + i * 150; levelButtons.push(button); game.addChild(button); } var backButton = new Text2("← Back to Menu", { size: 50, fill: 0xFFFFFF }); backButton.anchor.set(0, 0.5); backButton.x = 50; backButton.y = 150; backButton.down = function (x, y, obj) { showMenu(); }; function showMenu() { currentScreen = 'menu'; if (currentGameLevel) { currentGameLevel.destroy(); currentGameLevel = null; } if (backButton.parent) { game.removeChild(backButton); } titleText.visible = true; subtitleText.visible = true; for (var i = 0; i < levelButtons.length; i++) { levelButtons[i].visible = true; } } function showGameplay() { currentScreen = 'gameplay'; titleText.visible = false; subtitleText.visible = false; for (var i = 0; i < levelButtons.length; i++) { levelButtons[i].visible = false; } if (currentGameLevel) { currentGameLevel.destroy(); } currentGameLevel = game.addChild(new GameLevel(currentLevel)); game.addChild(backButton); }
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,296 @@
-/****
+/****
+* Plugins
+****/
+var storage = LK.import("@upit/storage.v1", {
+ unlockedLevel: 1
+});
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var GameLevel = Container.expand(function (levelNumber) {
+ var self = Container.call(this);
+ self.levelNumber = levelNumber;
+ self.gingerFound = false;
+ var backgroundAsset = '';
+ var gingerX = 0;
+ var gingerY = 0;
+ switch (levelNumber) {
+ case 1:
+ // Safari
+ backgroundAsset = 'safariBackground';
+ gingerX = 400 + Math.random() * 800;
+ gingerY = 600 + Math.random() * 800;
+ break;
+ case 2:
+ // Train
+ backgroundAsset = 'trainBackground';
+ gingerX = 500 + Math.random() * 700;
+ gingerY = 700 + Math.random() * 600;
+ break;
+ case 3:
+ // Snow
+ backgroundAsset = 'snowBackground';
+ gingerX = 600 + Math.random() * 600;
+ gingerY = 800 + Math.random() * 500;
+ break;
+ case 4:
+ // Kids Bedroom
+ backgroundAsset = 'bedroomBackground';
+ gingerX = 700 + Math.random() * 500;
+ gingerY = 900 + Math.random() * 400;
+ break;
+ case 5:
+ // Banana Land
+ backgroundAsset = 'bananaBackground';
+ gingerX = 800 + Math.random() * 400;
+ gingerY = 1000 + Math.random() * 300;
+ break;
+ }
+ var background = self.attachAsset(backgroundAsset, {
+ anchorX: 0,
+ anchorY: 0
+ });
+ self.createSceneObjects = function () {
+ if (levelNumber === 1) {
+ // Safari
+ for (var i = 0; i < 8; i++) {
+ var tree = self.addChild(LK.getAsset('tree', {
+ anchorX: 0.5,
+ anchorY: 1
+ }));
+ tree.x = 200 + Math.random() * 1600;
+ tree.y = 400 + Math.random() * 1800;
+ }
+ for (var i = 0; i < 12; i++) {
+ var rock = self.addChild(LK.getAsset('rock', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ rock.x = 100 + Math.random() * 1800;
+ rock.y = 300 + Math.random() * 2000;
+ }
+ for (var i = 0; i < 10; i++) {
+ var bush = self.addChild(LK.getAsset('bush', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ bush.x = 150 + Math.random() * 1700;
+ bush.y = 400 + Math.random() * 1900;
+ }
+ } else if (levelNumber === 2) {
+ // Train
+ for (var i = 0; i < 6; i++) {
+ var trainCar = self.addChild(LK.getAsset('trainCar', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ trainCar.x = 300 + i * 250;
+ trainCar.y = 800 + Math.random() * 400;
+ var wheel1 = self.addChild(LK.getAsset('wheel', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ wheel1.x = trainCar.x - 60;
+ wheel1.y = trainCar.y + 70;
+ var wheel2 = self.addChild(LK.getAsset('wheel', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ wheel2.x = trainCar.x + 60;
+ wheel2.y = trainCar.y + 70;
+ }
+ } else if (levelNumber === 3) {
+ // Snow
+ for (var i = 0; i < 8; i++) {
+ var snowman = self.addChild(LK.getAsset('snowman', {
+ anchorX: 0.5,
+ anchorY: 1
+ }));
+ snowman.x = 200 + Math.random() * 1600;
+ snowman.y = 500 + Math.random() * 1800;
+ }
+ for (var i = 0; i < 15; i++) {
+ var rock = self.addChild(LK.getAsset('rock', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ rock.x = 100 + Math.random() * 1800;
+ rock.y = 400 + Math.random() * 2000;
+ }
+ } else if (levelNumber === 4) {
+ // Kids Bedroom
+ for (var i = 0; i < 4; i++) {
+ var bed = self.addChild(LK.getAsset('bed', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ bed.x = 300 + i * 400;
+ bed.y = 600 + Math.random() * 800;
+ }
+ for (var i = 0; i < 20; i++) {
+ var toy = self.addChild(LK.getAsset('toy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ toy.x = 150 + Math.random() * 1700;
+ toy.y = 400 + Math.random() * 2000;
+ }
+ } else if (levelNumber === 5) {
+ // Banana Land
+ for (var i = 0; i < 50; i++) {
+ var banana = self.addChild(LK.getAsset('banana', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ banana.x = 100 + Math.random() * 1800;
+ banana.y = 300 + Math.random() * 2100;
+ }
+ }
+ };
+ self.createSceneObjects();
+ var gingerSprite = self.addChild(LK.getAsset('ginger', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ gingerSprite.x = gingerX;
+ gingerSprite.y = gingerY;
+ gingerSprite.down = function (x, y, obj) {
+ if (!self.gingerFound) {
+ self.gingerFound = true;
+ LK.getSound('found').play();
+ tween(gingerSprite, {
+ scaleX: 1.5,
+ scaleY: 1.5
+ }, {
+ duration: 300
+ });
+ LK.effects.flashObject(gingerSprite, 0x00ff00, 500);
+ LK.setTimeout(function () {
+ var nextLevel = levelNumber + 1;
+ if (nextLevel <= 5) {
+ storage.unlockedLevel = Math.max(storage.unlockedLevel, nextLevel);
+ levelButtons[nextLevel - 1].unlock();
+ }
+ if (nextLevel <= 5) {
+ currentLevel = nextLevel;
+ showGameplay();
+ } else {
+ LK.showYouWin();
+ }
+ }, 1000);
+ }
+ };
+ return self;
+});
+var LevelButton = Container.expand(function (levelNumber, levelName, isLocked) {
+ var self = Container.call(this);
+ var buttonGraphics = self.attachAsset(isLocked ? 'lockedButton' : 'levelButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var labelText = new Text2(levelName, {
+ size: 40,
+ fill: isLocked ? "#666666" : "#ffffff"
+ });
+ labelText.anchor.set(0.5, 0.5);
+ self.addChild(labelText);
+ self.levelNumber = levelNumber;
+ self.isLocked = isLocked;
+ self.down = function (x, y, obj) {
+ if (!self.isLocked) {
+ currentLevel = self.levelNumber;
+ showGameplay();
+ }
+ };
+ self.unlock = function () {
+ self.isLocked = false;
+ buttonGraphics.destroy();
+ var newButton = self.attachAsset('levelButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ labelText.style.fill = "#ffffff";
+ LK.getSound('unlock').play();
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87ceeb
+});
+
+/****
+* Game Code
+****/
+var currentScreen = 'menu'; // 'menu' or 'gameplay'
+var currentLevel = 1;
+var levelButtons = [];
+var currentGameLevel = null;
+var titleText = new Text2("Where's Ginger?", {
+ size: 80,
+ fill: 0x2C3E50
+});
+titleText.anchor.set(0.5, 0.5);
+titleText.x = 1024;
+titleText.y = 300;
+game.addChild(titleText);
+var subtitleText = new Text2("Find Ginger hiding in each scene!", {
+ size: 40,
+ fill: 0x34495E
+});
+subtitleText.anchor.set(0.5, 0.5);
+subtitleText.x = 1024;
+subtitleText.y = 400;
+game.addChild(subtitleText);
+var levelNames = ['Safari', 'Train', 'Snow', 'Kids Bedroom', 'Banana Land'];
+for (var i = 0; i < 5; i++) {
+ var isLocked = i + 1 > storage.unlockedLevel;
+ var button = new LevelButton(i + 1, levelNames[i], isLocked);
+ button.x = 1024;
+ button.y = 600 + i * 150;
+ levelButtons.push(button);
+ game.addChild(button);
+}
+var backButton = new Text2("← Back to Menu", {
+ size: 50,
+ fill: 0xFFFFFF
+});
+backButton.anchor.set(0, 0.5);
+backButton.x = 50;
+backButton.y = 150;
+backButton.down = function (x, y, obj) {
+ showMenu();
+};
+function showMenu() {
+ currentScreen = 'menu';
+ if (currentGameLevel) {
+ currentGameLevel.destroy();
+ currentGameLevel = null;
+ }
+ if (backButton.parent) {
+ game.removeChild(backButton);
+ }
+ titleText.visible = true;
+ subtitleText.visible = true;
+ for (var i = 0; i < levelButtons.length; i++) {
+ levelButtons[i].visible = true;
+ }
+}
+function showGameplay() {
+ currentScreen = 'gameplay';
+ titleText.visible = false;
+ subtitleText.visible = false;
+ for (var i = 0; i < levelButtons.length; i++) {
+ levelButtons[i].visible = false;
+ }
+ if (currentGameLevel) {
+ currentGameLevel.destroy();
+ }
+ currentGameLevel = game.addChild(new GameLevel(currentLevel));
+ game.addChild(backButton);
+}
\ No newline at end of file