Code edit (1 edits merged)
Please save this source code
Code edit (2 edits merged)
Please save this source code
User prompt
use the Ring class in gameInitialize
User prompt
create a Class for the ring
Code edit (2 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: player is undefined' in or related to this line: 'if ((player.leftHand.intersects(opponent.head) || player.rightHand.intersects(opponent.head)) && player.isPunching) {' Line Number: 293
Code edit (1 edits merged)
Please save this source code
User prompt
only flash on hit when an athlete is Punching
User prompt
restore self.isPunching
User prompt
update self.isPunching
User prompt
add a propoery isPunching to athlete class
Code edit (1 edits merged)
Please save this source code
User prompt
set isPlaying to true on 1st screen tap
Code edit (1 edits merged)
Please save this source code
User prompt
don't update athletes when isPlaying is false
Code edit (2 edits merged)
Please save this source code
User prompt
add a globalVariable isPlaying
Code edit (1 edits merged)
Please save this source code
User prompt
in mainMove(); define a target within the ring then progressively move to the target. when reached choose another target
Code edit (1 edits merged)
Please save this source code
User prompt
in Athlete mainMove, make player randomly move around the ring center
Code edit (1 edits merged)
Please save this source code
Code edit (2 edits merged)
Please save this source code
User prompt
in Player mini movements, also move forearms ans hands
User prompt
Add another button in the bottom center : gardButton
/**** * Classes ****/ /****************************************************************************************** */ /************************************* ATHLETE CLASS ************************************** */ /****************************************************************************************** */ var Athlete = Container.expand(function (isHuman) { var self = Container.call(this); self.isHuman = isHuman; self.body = new Container(); game.addChild(self.body); // Define punch distance for punching animation var punchDistance = 50; // Left Arm self.leftForearm = self.body.attachAsset('forearm', { anchorX: 0.5, anchorY: 0.5, x: -110, y: -125, width: 80, rotation: -Math.PI * 0.2 }); self.leftHand = self.body.attachAsset('hand', { anchorX: 0.5, anchorY: 0.5, x: -110, y: -250, width: 80, height: 180, rotation: -Math.PI * 0.05 }); self.leftArm = self.body.attachAsset('arm', { anchorX: 0.5, anchorY: 0, x: -120, y: -120 }); // Right Arm self.rightForearm = self.body.attachAsset('forearm', { anchorX: 0.5, anchorY: 0.5, x: 110, y: -125, scaleX: -1, width: 80, rotation: Math.PI * 0.2 }); self.rightHand = self.body.attachAsset('hand', { anchorX: 0.5, anchorY: 0.5, x: 110, y: -250, scaleX: -1, width: 80, height: 180, rotation: Math.PI * 0.05 }); self.rightArm = self.body.attachAsset('arm', { anchorX: 0.5, anchorY: 0, x: 120, y: -120, scaleX: -1 }); self.torso = self.body.attachAsset('body', { anchorX: 0.5, anchorY: 0.5 }); self.head = self.body.attachAsset('head', { anchorX: 0.5, anchorY: 0.5, y: -40 }); // Player movement speed self.speed = 5; // Punch function to handle punching action self.punch = function (isLeft) { var arm = isLeft ? self.leftArm : self.rightArm; var forearm = isLeft ? self.leftForearm : self.rightForearm; var hand = isLeft ? self.leftHand : self.rightHand; // Punch animation logic LK.setTimeout(function () { arm.height += punchDistance; arm.y -= punchDistance; forearm.height += punchDistance; forearm.y -= punchDistance * 1.5; // Move forearm up for punch forearm.rotation *= 0.5; //= -Math.PI * 0.1; //-Math.PI * 0.2 hand.x += 5; // Move hand up for punch hand.y -= punchDistance * 2; // Move hand up for punch // Add head movement to mimic boxer's dodge self.head.x += isLeft ? 15 : -15; // Move head opposite to punching arm self.head.width *= 0.95; // Simulate head tilt by narrowing the width self.head.height *= 1.05; // Reset head width to simulate head tilt back self.head.rotation -= isLeft ? -0.1 : 0.1; // Simulate head tilt by narrowing the width }, 100); LK.setTimeout(function () { arm.height -= punchDistance; arm.y += punchDistance; forearm.height -= punchDistance; forearm.y += punchDistance * 1.5; // Move forearm up for punch forearm.rotation *= 2; //-Math.PI * 0.2 hand.x -= 5; // Move hand up for punch hand.y += punchDistance * 2; // Move hand up for punch self.head.x += isLeft ? -15 : 15; // Move head opposite to punching arm self.head.width /= 0.95; // Reset head width to simulate head tilt back self.head.height /= 1.05; // Reset head width to simulate head tilt back self.head.rotation += isLeft ? -0.1 : 0.1; // Simulate head tilt by narrowing the width }, 200); }; // Update player position based on input self.update = function () { if (isPlaying) { // Only move player if it's human controlled automatically self.mainMove(); // Player is idle self.miniMove(); // Update body position and rotation self.body.x = self.x; self.body.y = self.y; // Calculate angle to face the opponent var target = self.isHuman ? enemy : player; // Determine target based on whether self is human or enemy var angleToOpponent = Math.atan2(target.y - self.y, target.x - self.x) + Math.PI * 0.5; self.body.rotation = angleToOpponent; } }; self.targetX = self.targetX || 1024; // Default target X self.targetY = self.targetY || 1366; // Default target Y self.mainMove = function () { // Check if athlete has reached the target var distanceToTarget = Math.sqrt(Math.pow(self.targetX - self.x, 2) + Math.pow(self.targetY - self.y, 2)); if (distanceToTarget < 10) { // Define a new target within the ring var ringCenterX = 1024; // Center of the ring X var ringCenterY = 1366; // Center of the ring Y var movementRadius = Math.random() * 300 + 100; // Random radius within which the athlete can move var angle = Math.random() * Math.PI * 2; // Generate a random angle for movement direction self.targetX = ringCenterX + Math.cos(angle) * movementRadius; self.targetY = ringCenterY + Math.sin(angle) * movementRadius; } else { // Progressively move to the target var moveX = (self.targetX - self.x) / distanceToTarget * self.speed; var moveY = (self.targetY - self.y) / distanceToTarget * self.speed; self.x += moveX; self.y += moveY; } }; self.miniMove = function () { // Mini head movement with added randomness self.head.y = -40 + Math.sin(LK.ticks / 10 + Math.random() * 0.2) * 2; // Mini arm and forearm movement with added randomness self.leftArm.rotation += Math.sin(LK.ticks / 15 + Math.random() * 0.2) * 0.005; self.leftForearm.rotation += Math.sin(LK.ticks / 15 + Math.random() * 0.2) * 0.005; // Add forearm movement self.leftHand.x += Math.sin(LK.ticks / 15 + Math.random() * 0.2) * 0.5; // Add hand movement self.leftHand.rotation += Math.sin(LK.ticks / 15 + Math.random() * 0.2) * 0.005; // Add hand movement self.rightArm.rotation -= Math.sin(LK.ticks / 15 + Math.random() * 0.2) * 0.005; self.rightForearm.rotation -= Math.sin(LK.ticks / 15 + Math.random() * 0.2) * 0.005; // Add forearm movement self.rightHand.x -= Math.sin(LK.ticks / 15 + Math.random() * 0.2) * 0.5; // Add hand movement self.rightHand.rotation -= Math.sin(LK.ticks / 15 + Math.random() * 0.2) * 0.005; // Add hand movement }; }); /****************************************************************************************** */ /************************************* GUARD BUTTON CLASS ********************************** */ /****************************************************************************************** */ var GuardButton = Container.expand(function () { var self = Container.call(this); self.buttonAsset = self.attachAsset('guardButton', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8 }); self.x = game.width / 2; // Position button in the bottom center self.y = game.height - 220; self.down = function (x, y, obj) { // Simulate guard button press self.alpha = 0.5; // Dim the button to indicate it's pressed }; self.up = function (x, y, obj) { // Simulate guard button release self.alpha = 0.8; // Return button opacity back to normal }; }); /****************************************************************************************** */ /************************************* PUNCH BUTTON CLASS ********************************** */ /****************************************************************************************** */ var PunchButton = Container.expand(function () { var self = Container.call(this); self.buttonAsset = self.attachAsset('punchButton', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8 }); self.x = game.width - 220; // Position button on the bottom right self.y = game.height - 220; self.down = function (x, y, obj) { // Simulate button press by triggering punch with left arm player.punch(Math.random() < 0.5); // Randomly choose left or right arm for punching self.width *= 0.9; self.height *= 0.9; }; self.up = function (x, y, obj) { // Simulate button release by triggering punch with right arm self.width /= 0.9; self.height /= 0.9; }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ var isPlaying = false; // Initialize ring in the game scene // TODO : Move to a class var ring = game.addChild(LK.getAsset('ring', { x: 1024, y: 1366, anchorX: 0.5, anchorY: 0.5 })); var punchButton = game.addChild(new PunchButton()); var guardButton = game.addChild(new GuardButton()); // Initialize player var player = game.addChild(new Athlete(true)); player.x = 1024; // Center horizontally player.y = 2000; // Position towards the bottom // Initialize a single fixed enemy var enemy = game.addChild(new Athlete()); enemy.x = 1024; // Center horizontally enemy.y = 1066; // Center vertically in the middle of the ring enemy.rotation = Math.PI * 0.5; // Update the single fixed enemy enemy.update(); var touchPosition = null; var swipeStart = null; var swipeEnd = null; game.down = function (x, y, obj) {}; game.move = function (x, y, obj) {}; game.up = function (x, y, obj) {}; // Game update function game.update = function () { // This section has been removed to prevent redundant player movement handling. // Check for collision between player's hand and enemy's head if (player.leftHand.intersects(enemy.head) || player.rightHand.intersects(enemy.head)) { // Player hit reaction: head goes back, flash screen red // Calculate enemy's current direction and move back accordingly var enemyDirection = Math.atan2(enemy.y - player.y, enemy.x - player.x); enemy.x += Math.cos(enemyDirection) * 50; // Move enemy back in the x direction of current movement enemy.y += Math.sin(enemyDirection) * 50; // Move enemy back in the y direction of current movement enemy.head.y -= 20; // Head returns to normal position LK.effects.flashScreen(0xFFFFFF, 100); // Flash the whole screen red for 0.5 seconds LK.setTimeout(function () { enemy.head.y += 20; // Head returns to normal position }, 500); } };
===================================================================
--- original.js
+++ change.js
@@ -108,19 +108,21 @@
}, 200);
};
// Update player position based on input
self.update = function () {
- // Only move player if it's human controlled automatically
- self.mainMove();
- // Player is idle
- self.miniMove();
- // Update body position and rotation
- self.body.x = self.x;
- self.body.y = self.y;
- // Calculate angle to face the opponent
- var target = self.isHuman ? enemy : player; // Determine target based on whether self is human or enemy
- var angleToOpponent = Math.atan2(target.y - self.y, target.x - self.x) + Math.PI * 0.5;
- self.body.rotation = angleToOpponent;
+ if (isPlaying) {
+ // Only move player if it's human controlled automatically
+ self.mainMove();
+ // Player is idle
+ self.miniMove();
+ // Update body position and rotation
+ self.body.x = self.x;
+ self.body.y = self.y;
+ // Calculate angle to face the opponent
+ var target = self.isHuman ? enemy : player; // Determine target based on whether self is human or enemy
+ var angleToOpponent = Math.atan2(target.y - self.y, target.x - self.x) + Math.PI * 0.5;
+ self.body.rotation = angleToOpponent;
+ }
};
self.targetX = self.targetX || 1024; // Default target X
self.targetY = self.targetY || 1366; // Default target Y
self.mainMove = function () {
clear
basic light gray convex round button with a red boxing glove icon. UI
Un gant de boxe bleu vu de dessus. video game
basic light round convex gray button with a raised blue shield icon.. UI
un éclair. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
remove
a basic white heart.. game icon
A boxer has lost the match..
man boxer with red gloves is KO on the ring..