Code edit (1 edits merged)
Please save this source code
User prompt
in dribblingPosture hands should be directed to the center
Code edit (10 edits merged)
Please save this source code
User prompt
use dribblingPosture instead of idlePosture when Player hasBall
User prompt
create a new posture named dribblingPosture
Code edit (1 edits merged)
Please save this source code
User prompt
Now, without altering the current functionality, a dribble movement to the ball when is not null
User prompt
Now in term of z-index, when player.verticalDirection is 0 : ball should appear in front of the player; when player.verticalDirection is 1 : ball should appear behind the player;
User prompt
when player.verticalDirection is 0, ball.y = ball.currentPlayer.y +20; when player.verticalDirection is 0 : ball.y = ball.currentPlayer.y - 120
Code edit (3 edits merged)
Please save this source code
User prompt
add a property hasBall to the Player Class
Code edit (2 edits merged)
Please save this source code
User prompt
when the ball has a current player, then it follows the player position
User prompt
when the player trunk touches the ball, then the player is affected to Ball.currentPlayer
User prompt
add a new property to the ball called currentPlayer
Code edit (3 edits merged)
Please save this source code
User prompt
hide the eyes when verticalDirection is 1
User prompt
add a verticalDirection property to player with value 0 when idle of moving down (targetPoint.y >= self.y) and value 1 when moving up (targetPoint.y < self.y)
Code edit (1 edits merged)
Please save this source code
User prompt
add eyes to the Player's head. use eyes asset
User prompt
for the Player head only, use asset playerHead1. don't change anything except the asset
Code edit (2 edits merged)
Please save this source code
User prompt
speed up the alternance of runningUp1 and runningUp2 in updatePosition
Code edit (1 edits merged)
Please save this source code
User prompt
in runningUp2, legs and foots are interverted. they should not, just change the other leg vertical position
/**** * Classes ****/ // Assets will be automatically created based on usage in the code. // Ball class for the basketball var Ball = Container.expand(function () { var self = Container.call(this); var ballGraphics = self.attachAsset('basketball', { anchorX: 0.5, anchorY: 0.5 }); self.speedY = 0; self.gravity = 0.5; self.isShot = false; self.currentPlayer = null; // New property to track the current player holding the ball self.shoot = function (power, angle) { self.speedY = -power; self.isShot = true; }; self.update = function () { if (self.isShot) { self.y += self.speedY; self.speedY += self.gravity; } }; self.reset = function () { self.x = 1024; // Center X self.y = 2500; // Starting Y self.isShot = false; self.speedY = 0; }; }); // Hoop class for the basketball hoop var Hoop = Container.expand(function () { var self = Container.call(this); var hoopGraphics = self.attachAsset('hoop', { anchorX: 0.5, anchorY: 0.5 }); self.setPosition = function () { self.x = 1024; // Center X self.y = 500; // Hoop Y position }; }); // Player class for the player var Player = Container.expand(function () { var self = Container.call(this); self.hasBall = false; // New property to indicate if the player has the ball self.verticalDirection = 0; // 0 when idle or moving down, 1 when moving up self.head = self.attachAsset('bodyPart', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 1 }); self.eyes = self.attachAsset('eyes', { anchorX: 0.5, anchorY: 0.75, scaleX: 0.8, scaleY: 1 }); self.rightArm = self.attachAsset('bodyPart', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 1.5 }); self.rightHand = self.attachAsset('bodyPart', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.75, scaleY: 0.5 }); self.leftArm = self.attachAsset('bodyPart', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 1.5 }); self.leftHand = self.attachAsset('bodyPart', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.75, scaleY: 0.5 }); self.trunk = self.attachAsset('bodyPart', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 2.0 }); self.rightLeg = self.attachAsset('bodyPart', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 2 }); self.rightFoot = self.attachAsset('bodyPart', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.75, scaleY: 0.5 }); self.leftLeg = self.attachAsset('bodyPart', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 2 }); self.leftFoot = self.attachAsset('bodyPart', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.75, scaleY: 0.5 }); self.updatePosture = function () { var speed = 0.1; // Speed of transition if (!this.targetPosture) { return; } //this.x += (this.targetPosture.x - this.x) * speed; //this.y += (this.targetPosture.y - this.y) * speed; if (this.targetPosture && this.targetPosture.head) { this.head.x += (this.targetPosture.head.x - this.head.x) * speed; } if (this.targetPosture && this.targetPosture.eyes) { this.eyes.x += (this.targetPosture.eyes.x - this.eyes.x) * speed; this.eyes.y += (this.targetPosture.eyes.y - this.eyes.y) * speed; this.eyes.visible = this.verticalDirection === 0; } this.head.y += (this.targetPosture.head.y - this.head.y) * speed; this.rightArm.x += (this.targetPosture.rightArm.x - this.rightArm.x) * speed; this.rightArm.y += (this.targetPosture.rightArm.y - this.rightArm.y) * speed; this.rightHand.x += (this.targetPosture.rightHand.x - this.rightHand.x) * speed; this.rightHand.y += (this.targetPosture.rightHand.y - this.rightHand.y) * speed; this.leftArm.x += (this.targetPosture.leftArm.x - this.leftArm.x) * speed; this.leftArm.y += (this.targetPosture.leftArm.y - this.leftArm.y) * speed; this.leftHand.x += (this.targetPosture.leftHand.x - this.leftHand.x) * speed; this.leftHand.y += (this.targetPosture.leftHand.y - this.leftHand.y) * speed; this.trunk.x += (this.targetPosture.trunk.x - this.trunk.x) * speed; this.trunk.y += (this.targetPosture.trunk.y - this.trunk.y) * speed; this.rightLeg.x += (this.targetPosture.rightLeg.x - this.rightLeg.x) * speed; this.rightLeg.y += (this.targetPosture.rightLeg.y - this.rightLeg.y) * speed; this.rightFoot.x += (this.targetPosture.rightFoot.x - this.rightFoot.x) * speed; this.rightFoot.y += (this.targetPosture.rightFoot.y - this.rightFoot.y) * speed; this.leftLeg.x += (this.targetPosture.leftLeg.x - this.leftLeg.x) * speed; this.leftLeg.y += (this.targetPosture.leftLeg.y - this.leftLeg.y) * speed; this.leftFoot.x += (this.targetPosture.leftFoot.x - this.leftFoot.x) * speed; this.leftFoot.y += (this.targetPosture.leftFoot.y - this.leftFoot.y) * speed; }; self.updatePosition = function () { if (self.targetPoint) { self.verticalDirection = self.targetPoint.y < self.y ? 1 : 0; var fixedSpeed = 10; // Fixed pixels per frame // Calculate direction vector var dx = self.targetPoint.x - self.x; var dy = self.targetPoint.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); var nx = dx / distance; // Normalized direction x var ny = dy / distance; // Normalized direction y // Move player by fixed speed in the direction of the targetPoint self.x += nx * fixedSpeed; self.y += ny * fixedSpeed; // Check if player is close enough to targetPoint to stop if (distance < fixedSpeed) { self.targetPoint = null; // Clear targetPoint when close enough self.verticalDirection = 0; self.setPosture(idlePosture); // Restore idle posture } else { // Alternate between runningUp1 and runningUp2 postures while moving var currentTick = LK.ticks; if (currentTick % 20 < 10) { self.setPosture(runningUp1); } else { self.setPosture(runningUp2); } } } }; self.setPosture = function (newPosture) { self.targetPosture = newPosture; }; self.goToPoint = function (newPosition) { self.targetPoint = newPosition; }; }); /**** * Initialize Game ****/ // Player positions var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background }); /**** * Game Code ****/ /******* Retro Basket ******** A retro basketball game. It's a one vs one basketball game. Ball is lanched in the middle. Players must run and catch it, then throw it in the oppoent hoop. *****************************/ var idlePosture = { x: 1024, y: 2000, head: { x: 0, y: -160 }, eyes: { x: 0, y: -160 }, rightArm: { x: 110, y: -20 }, rightHand: { x: 125, y: 30 }, leftArm: { x: -110, y: -20 }, leftHand: { x: -120, y: 30 }, trunk: { x: 0, y: 0 }, rightLeg: { x: 37.5, y: 150 }, rightFoot: { x: 50, y: 250 }, leftLeg: { x: -37.5, y: 150 }, leftFoot: { x: -50, y: 250 } }; var runningUp1 = { x: 1024, // Center X y: 2000, // Player Y position head: { x: 0, y: -160 }, eyes: { x: 0, y: -160 }, rightArm: { x: 90, y: -20 }, rightHand: { x: 105, y: 30 }, leftArm: { x: -90, y: -20 }, leftHand: { x: -105, y: 30 }, trunk: { x: 0, y: 0 }, rightLeg: { x: 40, y: 100 }, rightFoot: { x: 50, y: 200 }, leftLeg: { x: -40, y: 150 }, leftFoot: { x: -50, y: 250 } }; var runningUp2 = { x: 1024, // Center X y: 2000, // Player Y position head: { x: 0, y: -160 }, eyes: { x: 0, y: -160 }, rightArm: { x: 80, y: -20 }, rightHand: { x: 95, y: 30 }, leftArm: { x: -80, y: -20 }, leftHand: { x: -95, y: 30 }, trunk: { x: 0, y: 0 }, rightLeg: { x: 40, y: 150 }, rightFoot: { x: 50, y: 250 }, leftLeg: { x: -40, y: 100 }, leftFoot: { x: -50, y: 200 } }; var throwingPosture = { x: 1024, // Center X y: 2000, // Player Y position head: { x: 0, y: -160 }, eyes: { x: 0, y: -160 }, rightArm: { x: 100, y: -120 }, rightHand: { x: 100, // Set the right hand at the top of the right arm y: -220 // Set the right hand at the top of the right arm }, leftArm: { x: -100, y: -120 }, leftHand: { x: -100, // Set the left hand at the top of the left arm y: -220 // Set the left hand at the top of the left arm }, trunk: { x: 0, y: 0 }, rightLeg: { x: 37.5, y: 150 }, rightFoot: { x: 50, y: 250 }, leftLeg: { x: -37.5, y: 150 }, leftFoot: { x: -50, y: 250 } }; var player = game.addChild(new Player()); player.x = 2048 / 2; // Center X player.y = 2732 / 2; // Center Y player.setPosture(idlePosture); var ball = game.addChild(new Ball()); ball.reset(); var hoop = game.addChild(new Hoop()); hoop.setPosition(); var score = 0; var scoreTxt = new Text2(score.toString(), { size: 150, fill: "#ffffff" }); LK.gui.top.addChild(scoreTxt); game.on('down', function (obj) { var pos = obj.event.getLocalPosition(game); player.goToPoint({ x: pos.x, y: pos.y }); }); var idle = true; // Test postures /* var changePostureTimer = LK.setInterval(function () { if (idle) { player.setPosture(runningUp1); idle = false; } else { player.setPosture(runningUp2); idle = true; } }, 1000); */ LK.on('tick', function () { ball.update(); // Check if player's trunk intersects with the ball if (player.trunk.intersects(ball)) { ball.currentPlayer = player; // Assign the player to the ball's currentPlayer property } // Make the ball follow the currentPlayer's position with dribble movement if (ball.currentPlayer) { ball.x = ball.currentPlayer.x; if (ball.currentPlayer.verticalDirection === 0) { ball.y = ball.currentPlayer.y + 20 + Math.sin(LK.ticks / 5) * 5; // Add dribble movement when moving down or idle game.addChild(ball); // Ensure ball is in front by re-adding it to the game } else { ball.y = ball.currentPlayer.y - 120 + Math.sin(LK.ticks / 5) * 5; // Add dribble movement when moving up game.addChild(ball.currentPlayer); // Ensure player is in front by re-adding it to the game } } player.updatePosture(); player.updatePosition(); // Check if ball intersects with hoop and is moving downwards if (ball.intersects(hoop) && ball.speedY > 0) { score += 1; scoreTxt.setText(score.toString()); ball.reset(); } // Reset ball if it goes off-screen if (ball.y > 2732) { ball.reset(); } });
===================================================================
--- original.js
+++ change.js
@@ -441,16 +441,16 @@
// Check if player's trunk intersects with the ball
if (player.trunk.intersects(ball)) {
ball.currentPlayer = player; // Assign the player to the ball's currentPlayer property
}
- // Make the ball follow the currentPlayer's position
+ // Make the ball follow the currentPlayer's position with dribble movement
if (ball.currentPlayer) {
ball.x = ball.currentPlayer.x;
if (ball.currentPlayer.verticalDirection === 0) {
- ball.y = ball.currentPlayer.y + 20;
+ ball.y = ball.currentPlayer.y + 20 + Math.sin(LK.ticks / 5) * 5; // Add dribble movement when moving down or idle
game.addChild(ball); // Ensure ball is in front by re-adding it to the game
} else {
- ball.y = ball.currentPlayer.y - 120;
+ ball.y = ball.currentPlayer.y - 120 + Math.sin(LK.ticks / 5) * 5; // Add dribble movement when moving up
game.addChild(ball.currentPlayer); // Ensure player is in front by re-adding it to the game
}
}
player.updatePosture();