User prompt
Don't use LK.score. Instead track a score in the game class and use getters and setters for it.
User prompt
Also log self.getScorePerSec() / 60 and LK.getScore() + self.getScorePerSec() / 60
User prompt
change the tick score update to directly access the score value
User prompt
Also log self.getScorePerSec() / 60 each tick
User prompt
Also log the scorepersec and scoreperclick values
User prompt
Add logging to track the current score each tick
Code edit (1 edits merged)
Please save this source code
User prompt
I would prefer to update the score every tick instead of once per second.
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'parent')' in this line: 'parent.parent.setScorePerSec(game.getScorePerSec() * self.effectValue);' Line Number: 52
User prompt
Ok, great, except now it's incrementing 60x too fast
User prompt
Nope, we're still not increasing, but if we remove the / 60 we do. So is it an int type problem?
User prompt
The score is not incrementing. Is dividing by 60 rounding to 0 or something?
Code edit (2 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: self.getScore is not a function' in this line: 'scoreTxt.setText(Math.round(self.getScore()).toString());' Line Number: 283
User prompt
Fix Bug: 'TypeError: self.getScore is not a function' in this line: 'self.setScore(self.getScore() + self.getScorePerSec() * (1 / 60));' Line Number: 282
Code edit (1 edits merged)
Please save this source code
User prompt
Don't round the score itself, just round when displaying it.
User prompt
The score should only add scorepersec by the delta of the tick
User prompt
Fix Bug: 'TypeError: self.parent.parent.getScorePerSec is not a function' in this line: 'self.parent.parent.setScorePerSec(self.parent.parent.getScorePerSec() + self.effectValue);' Line Number: 50
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'parent')' in this line: 'parent.parent.setScorePerSec(game.getScorePerSec() + self.effectValue);' Line Number: 50
Code edit (1 edits merged)
Please save this source code
User prompt
How can the upgrade class properly change the scorepersec value of the Game instance?
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'setScorePerSec')' in this line: 'game.setScorePerSec(game.getScorePerSec() + self.effectValue);' Line Number: 50
User prompt
Fix Bug: 'TypeError: self.parent.getScorePerSec is not a function' in this line: 'self.parent.setScorePerSec(self.parent.getScorePerSec() + self.effectValue);' Line Number: 50
User prompt
Instead of modifying scorepersec directly, let's create get and set functions for scorepersec and have the upgrades class use those
var Upgrade = Container.expand(function (cost, effectType, effectMode, effectValue, available) { var self = Container.call(this); self.available = available || false; self.purchased = false; var self = Container.call(this); self.available = false; self.purchased = false; var upgradeGraphics = self.createAsset('upgrade', 'Upgrade Graphics', .5, .5); var costText = new Text2('Cost: ' + (cost < 10000 ? Math.round(cost) : cost.toPrecision(2)), { size: 35, fill: '#ffffff', anchor: { x: 0.5, y: 0.5 } }); costText.y = -35; costText.x = -costText.width / 2; self.addChild(costText); var effectDescription = effectType === 'click' ? 'Per Click: ' : 'Per Second: '; effectDescription += effectMode === 'add' ? '+' : 'x'; effectDescription += effectValue !== undefined ? effectValue.toString() : '0'; var effectText = new Text2(effectDescription, { size: 35, fill: '#ffffff', anchor: { x: 0.5, y: 0.5 } }); effectText.y = 35; effectText.x = -effectText.width / 2; self.addChild(effectText); self.cost = cost; self.effectType = effectType; self.effectMode = effectMode; self.effectValue = effectValue; self.purchased = false; self.on('down', function () { var gameInstance = self.parent.parent.parent; if (!self.purchased && gameInstance.getScore() >= self.cost) { gameInstance.setScore(gameInstance.getScore() - self.cost); if (self.effectType === 'click') { if (self.effectMode === 'add') { cloud.clickValue += self.effectValue; } else { cloud.clickValue *= self.effectValue; } } else { if (self.effectMode === 'add') { self.parent.parent.parent.setScorePerSec(self.parent.parent.parent.getScorePerSec() + self.effectValue); } else if (self.effectMode === 'multiply') { self.parent.parent.parent.setScorePerSec(self.parent.parent.parent.getScorePerSec() * self.effectValue); } } self.purchased = true; self.removeChild(self); self.parent.children.forEach(function (upgrade, index) { if (upgrade.purchased) { self.parent.removeChild(upgrade); } else { upgrade.y -= 150; } }); } }); }); var TabButton = Container.expand(function (label, onClick) { var self = Container.call(this); var buttonGraphics = self.createAsset('tabButton', 'Tab Button Graphics', 0, 0.5); buttonGraphics.tint = 0x777777; var buttonText = new Text2(label, { size: 50, fill: '#ffffff', anchor: { x: 0.5, y: 0.5 }, align: 'center' }); self.addChild(buttonText); self.on('down', function () { onClick(); }); }); var TabSystem = Container.expand(function () { var self = Container.call(this); self.tabs = {}; self.currentTab = ''; self.addTab = function (name, content) { self.tabs[name] = content; content.visible = false; self.addChild(content); }; self.switchTab = function (name) { if (self.tabs[self.currentTab]) { self.tabs[self.currentTab].visible = false; self.tabs[self.currentTab].children.forEach(function (child) { child.visible = false; }); } self.currentTab = name; self.tabs[name].visible = true; self.tabs[name].children.forEach(function (child) { child.visible = true; if (child instanceof TabButton) { child.children[0].tint = 0xFFFFFF; } }); Object.values(self.tabs).forEach(function (content) { if (content !== self.tabs[name]) { content.children.forEach(function (child) { if (child instanceof TabButton) { child.children[0].tint = 0x777777; } }); } }); }; }); var Snowflake = Container.expand(function () { var self = Container.call(this); var snowflakeGraphics = self.createAsset('snowflake', 'Snowflake Graphics', .5, .5); self.rotationSpeed = (Math.random() - 0.5) * 0.02; self.swayMagnitude = Math.random() * 10; self.swaySpeed = (Math.random() - 0.5) * 0.03; self.sizeFactor = Math.random() * 0.75 + 0.25; self.scale.set(self.sizeFactor); self.swayMagnitude = self.sizeFactor * 5; self.swayOffset = Math.random() * Math.PI * 2; self.update = function () { self.y += 0.5 + Math.random(); self.rotation += self.rotationSpeed; self.x += Math.sin(LK.ticks * self.swaySpeed * 2 + self.swayOffset) * (self.swayMagnitude * 0.25); }; self.collect = function () { var gameInstance = self.parent; gameInstance.setScore(Math.round(gameInstance.getScore() + 1)); scoreTxt.setText(gameInstance.getScore().toString()); self.destroy(); }; }); var Cloud = Container.expand(function () { var self = Container.call(this); self.visible = true; var cloudGraphics = self.createAsset('cloud', 'Cloud Graphics', .5, .5); cloudGraphics.alpha = 1; self.spawnRate = 1; self.clickValue = 1; self.bounceSpeed = 0.02; self.bounceHeight = 15; self.bounceOffset = 0; self.swayWidth = 300; self.swaySpeed = .003; self.update = function () { self.bounceOffset += self.bounceSpeed; self.y = 2732 / 2 + Math.sin(self.bounceOffset) * self.bounceHeight; self.x = 1024 + Math.sin(LK.ticks * self.swaySpeed) * self.swayWidth; }; self.spawnSnowflake = function () { var snowflake = new Snowflake(); var cloudWidth = cloudGraphics.width; snowflake.x = this.x + (Math.random() - 0.5) * 800; snowflake.y = self.y + cloudGraphics.height / 2 + Math.sin(self.bounceOffset) * self.bounceHeight; snowflake.rotation = Math.random() * Math.PI * 2; return snowflake; }; }); var Game = Container.expand(function () { var self = Container.call(this); self._score = 0; self._scorePerSec = 0; self.getScore = function () { return self._score; }; self.setScore = function (value) { self._score = value; }; self.getScorePerSec = function () { return self._scorePerSec; }; self.setScorePerSec = function (value) { self._scorePerSec = value; }; LK.stageContainer.setBackgroundColor(0x000000); var tabSystem = new TabSystem(); var upgradesTab = new Container(); var upgradesConfig = [{ cost: 10, effectType: 'perSecond', effectMode: 'add', effectValue: 1 }, { cost: 25, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 100, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 500, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 1000, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 2500, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 10000, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 20000, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }]; var columns = 3; var upgradeWidth = 400; var upgradeHeight = 200; var upgradeSpacing = 200; var upgradePadding = 200; var startX = 0 - upgradeWidth / 2; var startY = 800; upgradesConfig.forEach(function (config, index) { var upgrade = upgradesTab.addChild(new Upgrade(config.cost, config.effectType, config.effectMode, config.effectValue)); var column = index % columns + 1; var row = Math.floor(index / columns); upgrade.x = startX + column * (upgradeWidth + upgradeSpacing); upgrade.y = startY + row * (upgradeHeight + upgradePadding); }); var scoreTxt; function initializeScoreText() { scoreTxt = new Text2('', { size: 150, fill: '#ffffff', anchor: { x: 0.5, y: 0.5 } }); scoreTxt.x = -scoreTxt.width / 2; LK.gui.topCenter.addChild(scoreTxt); scoreTxt.y = LK.gui.topCenter.height / 2; } initializeScoreText(); var cloudTabButton = new TabButton('Cloud', function () { tabSystem.switchTab('Cloud'); }); var upgradesTabButton = new TabButton('Upgrades', function () { tabSystem.switchTab('Upgrades'); }); cloudTabButton.x = -cloudTabButton.width; cloudTabButton.y = scoreTxt.y + scoreTxt.height + 50; upgradesTabButton.x = 10; upgradesTabButton.y = cloudTabButton.y; LK.gui.topCenter.addChild(cloudTabButton); LK.gui.topCenter.addChild(upgradesTabButton); self.addChild(tabSystem); var snowflakes = []; var cloudTab = new Container(); var cloud = cloudTab.addChild(new Cloud()); cloud.x = 2048 / 2; cloud.y = 2732 / 2; tabSystem.addTab('Upgrades', upgradesTab); tabSystem.addTab('Cloud', cloudTab); tabSystem.switchTab('Cloud'); cloud.on('down', function (obj) { for (var i = 0; i < cloud.spawnRate; i++) { var snowflake = cloud.spawnSnowflake(); snowflakes.push(snowflake); self.addChild(snowflake); } var gameInstance = self.parent.parent; gameInstance.setScore(gameInstance.getScore() + cloud.clickValue); console.log('Score per click:', cloud.clickValue); scoreTxt.setText(Math.round(gameInstance.getScore()).toString()); }); var tickCount = 0; LK.on('tick', function () { console.log('Current score:', LK.getScore(), 'Score per second:', self.getScorePerSec(), 'Score per tick:', self.getScorePerSec() / 60, 'New score after tick:', LK.getScore() + self.getScorePerSec() / 60); self.setScore(self.getScore() + self.getScorePerSec() / 60); tickCount++; scoreTxt.setText(Math.round(self.getScore()).toString()); cloud.update(); for (var i = snowflakes.length - 1; i >= 0; i--) { snowflakes[i].update(); if (snowflakes[i].y > 2732 + snowflakes[i].height) { snowflakes[i].destroy(); snowflakes.splice(i, 1); } } scoreTxt.setText(LK.getScore().toString()); }); });
===================================================================
--- original.js
+++ change.js
@@ -36,10 +36,11 @@
self.effectMode = effectMode;
self.effectValue = effectValue;
self.purchased = false;
self.on('down', function () {
- if (!self.purchased && LK.getScore() >= self.cost) {
- LK.setScore(LK.getScore() - self.cost);
+ var gameInstance = self.parent.parent.parent;
+ if (!self.purchased && gameInstance.getScore() >= self.cost) {
+ gameInstance.setScore(gameInstance.getScore() - self.cost);
if (self.effectType === 'click') {
if (self.effectMode === 'add') {
cloud.clickValue += self.effectValue;
} else {
@@ -132,10 +133,11 @@
self.rotation += self.rotationSpeed;
self.x += Math.sin(LK.ticks * self.swaySpeed * 2 + self.swayOffset) * (self.swayMagnitude * 0.25);
};
self.collect = function () {
- LK.setScore(Math.round(LK.getScore() + 1));
- scoreTxt.setText(LK.getScore().toString());
+ var gameInstance = self.parent;
+ gameInstance.setScore(Math.round(gameInstance.getScore() + 1));
+ scoreTxt.setText(gameInstance.getScore().toString());
self.destroy();
};
});
var Cloud = Container.expand(function () {
@@ -165,9 +167,16 @@
};
});
var Game = Container.expand(function () {
var self = Container.call(this);
+ self._score = 0;
self._scorePerSec = 0;
+ self.getScore = function () {
+ return self._score;
+ };
+ self.setScore = function (value) {
+ self._score = value;
+ };
self.getScorePerSec = function () {
return self._scorePerSec;
};
self.setScorePerSec = function (value) {
@@ -272,18 +281,19 @@
var snowflake = cloud.spawnSnowflake();
snowflakes.push(snowflake);
self.addChild(snowflake);
}
- LK.setScore(LK.getScore() + cloud.clickValue);
+ var gameInstance = self.parent.parent;
+ gameInstance.setScore(gameInstance.getScore() + cloud.clickValue);
console.log('Score per click:', cloud.clickValue);
- scoreTxt.setText(Math.round(LK.getScore()).toString());
+ scoreTxt.setText(Math.round(gameInstance.getScore()).toString());
});
var tickCount = 0;
LK.on('tick', function () {
console.log('Current score:', LK.getScore(), 'Score per second:', self.getScorePerSec(), 'Score per tick:', self.getScorePerSec() / 60, 'New score after tick:', LK.getScore() + self.getScorePerSec() / 60);
- LK.setScore(LK.getScore() + self.getScorePerSec() / 60);
+ self.setScore(self.getScore() + self.getScorePerSec() / 60);
tickCount++;
- scoreTxt.setText(Math.round(LK.getScore()).toString());
+ scoreTxt.setText(Math.round(self.getScore()).toString());
cloud.update();
for (var i = snowflakes.length - 1; i >= 0; i--) {
snowflakes[i].update();
if (snowflakes[i].y > 2732 + snowflakes[i].height) {