User prompt
In game tick method set ball shadow y to ball y + ball height
User prompt
Remove the code that sets ball shadow y under startup
User prompt
Set ball shadow y in tick to ball y + half of ball height
User prompt
Remove the code that sets ballShadow y during startup
User prompt
In tick set ball shadow y to 2300+ ball height /2
User prompt
In tick after setting ball shadow y set ball shadow scale to scale of ball
User prompt
When calculating ball shadow scale. Multiply with scale of ball
User prompt
Prevent score from happening if ball has bounced
User prompt
Move the if statement and content where you test it ball speed larger than y to the top of the tick method
User prompt
Delete the bottom version of it ball speed y larger than zero. Do this by rewriting the button of the tick method completely
User prompt
Move the if statement and content where you test it ball speed larger than y to the top of the tick method. Start by deleting old version of this if at the bottom of tixk
User prompt
Call call move before the code that tests for y position of ball
Code edit (1 edits merged)
Please save this source code
User prompt
make ball scale twice as fast
Code edit (2 edits merged)
Please save this source code
User prompt
set target scale to targetScale and multiply by 0.05
Code edit (3 edits merged)
Please save this source code
User prompt
update ballShadow.y calculation to be 1800 + ball.height / 2 + 500 * the scale of ball
User prompt
calculate a dynamic floorY inside tick
User prompt
move floorY inside tick, as the first line
User prompt
delete the floorY definition in the games class
User prompt
Fix Bug: 'ReferenceError: Can't find variable: floorY' in this line: 'ball.y = floorY - ball.height;' Line Number: 162
User prompt
remove the instance of floorY which is not inside the tick class
Code edit (5 edits merged)
Please save this source code
User prompt
update ballShadow.y calculation to be 1800 + ball.height / 2 + 500 * the scale of ball
var HoopRim = Container.expand(function () {
var self = Container.call(this);
var hoopRimGraphics = LK.getAsset('hoopRimSeparate', 'Basketball Hoop Rim Separate', .5, .5);
self.addChild(hoopRimGraphics);
});
var Ball = Container.expand(function () {
var self = Container.call(this);
self.hasScored = false;
self.hasBounced = false;
var ballGraphics = LK.getAsset('ball', 'Basketball', .5, .5);
self.addChild(ballGraphics);
self.speed = {
x: 0,
y: 0
};
self.hasThrown = false;
self.move = function () {
self.speed.y += 3.2;
self.x += self.speed.x;
self.y += self.speed.y;
self.rotation += self.speed.x * 0.01;
if (self.hasThrown) {
var targetScale = 0.8;
self.scale.x += (targetScale - self.scale.x) * 0.02;
self.scale.y += (targetScale - self.scale.y) * 0.02;
}
};
self.bounceOffPoint = function (x, y, elasticity) {
var dx = self.x - x;
var dy = self.y - y;
var angle = Math.atan2(dy, dx);
var speed = Math.sqrt(self.speed.x * self.speed.x + self.speed.y * self.speed.y);
self.speed.x = Math.cos(angle) * speed * elasticity;
self.speed.y = Math.sin(angle) * speed * elasticity;
};
self.angleTo = function (x, y) {
var dx = self.x - x;
var dy = self.y - y;
return Math.atan2(dy, dx);
};
self.distanceTo = function (x, y) {
var dx = self.x - x;
var dy = self.y - y;
return Math.sqrt(dx * dx + dy * dy);
};
self.moveToDistance = function (x, y, distance) {
var angle = self.angleTo(x, y);
self.x = x + Math.cos(angle) * (distance * 1.05);
self.y = y + Math.sin(angle) * (distance * 1.05);
};
});
var Hoop = Container.expand(function () {
var self = Container.call(this);
self.moveTo = function (newX, newY, hoopRim) {
var dx = (newX - self.x) / 60;
var dy = (newY - self.y) / 60;
var steps = 0;
var interval = LK.setInterval(function () {
self.x += dx;
self.y += dy;
hoopRim.x = self.x;
hoopRim.y = self.y + self.children[1].y - 150;
steps++;
if (steps >= 60) {
LK.clearInterval(interval);
}
});
};
var backboardGraphics = LK.getAsset('backboard', 'Basketball Backboard', .5, .5);
backboardGraphics.y -= 250;
self.addChild(backboardGraphics);
self.hoopRimGraphics = LK.getAsset('hoopRim', 'Basketball Hoop Rim', .5, .5);
self.hoopRimGraphics.y = backboardGraphics.height / 2 - 550 + 20 + 120 + 150;
self.hoopRimGraphics.alpha = 0;
self.addChild(self.hoopRimGraphics);
self.leftElement = LK.getAsset('leftElement', 'Left Side Element', .5, .5);
self.leftElement.x = self.hoopRimGraphics.x - self.hoopRimGraphics.width / 2 + self.leftElement.width / 2;
self.leftElement.y = self.hoopRimGraphics.y - 150;
self.leftElement.alpha = 0;
self.addChild(self.leftElement);
self.rightElement = LK.getAsset('rightElement', 'Right Side Element', .5, .5);
self.rightElement.x = self.hoopRimGraphics.x + self.hoopRimGraphics.width / 2 - self.rightElement.width / 2;
self.rightElement.y = self.hoopRimGraphics.y - 150;
self.rightElement.alpha = 0;
self.addChild(self.rightElement);
self.multiplierLabel = new Text2('', {
size: 150 * 1.3 * 1.3,
fill: '#9f4a2d',
font: 'Impact'
});
self.multiplierLabel.anchor.set(.5, .5);
self.multiplierLabel.x = self.hoopRimGraphics.x;
self.multiplierLabel.y = self.hoopRimGraphics.y - 250 + 20 - 80;
self.addChild(self.multiplierLabel);
});
var Game = Container.expand(function () {
var self = Container.call(this);
var bg = LK.getAsset('background', 'Background Image', 0.5, 0.5);
bg.x = 2048 / 2;
bg.y = 2732 / 2 + 150;
bg.alpha = 0.7;
self.addChild(bg);
var hoop = self.addChild(new Hoop());
var score = 0;
var scoreMultiplier = 1;
var scoreTxt = new Text2(score.toString(), {
size: 150,
fill: '#ffffff',
font: 'Impact',
dropShadow: true,
dropShadowColor: '#000000',
dropShadowBlur: 4,
dropShadowAngle: Math.PI / 6,
dropShadowDistance: 6
});
scoreTxt.anchor.set(.5, 0);
LK.gui.topCenter.addChild(scoreTxt);
var ballShadow = LK.getAsset('ballShadow', 'Ball Shadow', .5, .5);
ballShadow.alpha = 0.5;
ballShadow.y = 2480;
self.addChild(ballShadow);
var ball = self.addChild(new Ball());
var hoopRim = self.addChild(new HoopRim());
ball.hitElement = '';
hoop.x = 2048 / 2;
hoop.y = 2732 / 2;
hoopRim.x = hoop.x;
hoopRim.y = hoop.y + hoop.children[1].y - 150;
ball.x = 2048 / 2;
ball.on('down', function (obj) {
if (!ball.hasThrown) {
var event = obj.event;
dragStart = event.getLocalPosition(self);
}
});
var dragStart = null;
stage.on('move', function (obj) {
var event = obj.event;
var pos = event.getLocalPosition(self);
if (dragStart !== null && ball.distanceTo(pos.x, pos.y) > 200) {
self.fireBall(obj);
}
});
self.fireBall = function (obj) {
if (dragStart !== null) {
var event = obj.event;
var pos = event.getLocalPosition(self);
var dx = pos.x - dragStart.x;
var dy = pos.y - dragStart.y;
var angle = Math.atan2(dy, dx);
ball.speed.x = Math.cos(angle) * 72 * 1.76 * 0.9 / 3;
ball.speed.y = Math.sin(angle) * 72 * 1.76 * 0.9;
ball.hasThrown = true;
ball.hitElement = '';
self.removeChild(ball);
self.addChild(ball);
dragStart = null;
}
};
stage.on('up', function (obj) {
self.fireBall(obj);
});
var floorY = 2732 - 100;
LK.on('tick', function () {
ball.move();
ballShadow.x = ball.x;
ballShadow.y = ball.y + ball.height;
var scale = 1 - 2 * (ball.y - 2732 + ball.height) / 2732;
ballShadow.scale.set(scale);
ballShadow.alpha = (1 - scale + 1) / 2;
if (ball.y + ball.height > floorY) {
ball.y = floorY - ball.height;
ball.speed.y *= -0.75;
ballShadow.x = ball.x;
ballShadow.visible = true;
if (ball.hasThrown && !ball.hasScored) {
if (!ball.hasBounced) {
ball.hasBounced = true;
} else {
LK.showGameOver();
}
} else if (ball.hasScored) {
ball.x = 2048 / 2;
ball.y = 2732 - ball.height;
ball.speed.x = 0;
ball.speed.y = 0;
ball.hasThrown = false;
ball.hasScored = false;
ball.hasBounced = false;
ball.scale.x = 1;
ball.scale.y = 1;
if (ball.hitElement === '') {
if (scoreMultiplier < 3) {
scoreMultiplier++;
}
} else {
scoreMultiplier = 1;
}
if (scoreMultiplier > 1) {
hoop.multiplierLabel.setText('x' + scoreMultiplier);
} else {
hoop.multiplierLabel.setText('');
}
ball.hitElement = '';
hoop.moveTo(Math.random() * (2048 - 1000) + 500, Math.random() * (2732 - 2000) + 1000, hoopRim);
}
}
if (ball.x + ball.width / 2 < 0 || ball.x - ball.width / 2 > 2048) {
LK.showGameOver();
} else if (ball.intersects(hoop.hoopRimGraphics) && ball.speed.y > 0 && !ball.hasScored && ball.x > hoop.x + hoop.leftElement.x && ball.x < hoop.x + hoop.rightElement.x) {
ball.hasScored = true;
score += scoreMultiplier;
scoreTxt.setText(score.toString());
}
if (ball.speed.y > 0) {
self.removeChild(hoopRim);
self.addChild(hoopRim);
if (ball.distanceTo(hoop.x + hoop.leftElement.x, hoop.y + hoop.leftElement.y) < ball.width / 2 + hoop.leftElement.width / 2) {
ball.moveToDistance(hoop.x + hoop.leftElement.x, hoop.y + hoop.leftElement.y, ball.width / 2 + hoop.leftElement.width / 2 + 1);
ball.bounceOffPoint(hoop.x + hoop.leftElement.x, hoop.y + hoop.leftElement.y, 0.5);
ball.hitElement = 'left';
}
if (ball.distanceTo(hoop.x + hoop.rightElement.x, hoop.y + hoop.rightElement.y) < ball.width / 2 + hoop.rightElement.width / 2) {
ball.moveToDistance(hoop.x + hoop.rightElement.x, hoop.y + hoop.rightElement.y, ball.width / 2 + hoop.rightElement.width / 2 + 1);
ball.bounceOffPoint(hoop.x + hoop.rightElement.x, hoop.y + hoop.rightElement.y, 0.5);
ball.hitElement = 'right';
}
}
});
});
Basketball, cartoon style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
4:3 Simple rectangle white outline. Black background
Skull explosion
Wide Single Orange metal bar lying down Single Game Texture. In-Game asset. 2d. Pixelart. White background. Blank background. Low detail. High contrast. —ar 2:1
https://kagi.com/proxy/basketball_backboard.png?c=iNrrnnUOe99nVfDGJsYBLujiaX2Hu-zxBFRkvLEyXdRnJ8cU3RjcAYbR-o12E923qVNGy1CEGrQG87ogCD3yUarJdZYt5R03mmEMb7Jrh-8%3D blank backboard Single Game Texture. In-Game asset. 2d. Pixelart. White background. Blank background. Low detail. High contrast.
Indoor stadium seen from court Single Game Texture. In-Game asset. 2d. Pixelart. White background. Blank background. Low detail. High contrast. --no goal