class Player { constructor(x, y, spriteSheet) { this.x = x; this.y = y; this.width = 24; this.height = 34; this.speed = 0.25; this.direction = 'right'; // Animation this.frameIndex = 0; this.frameTimer = 0; this.idleFrameInterval = 60; // Más lento para idle this.walkFrameInterval = 15; // Más rápido para caminar this.isMoving = false; // Sprite coordinates from the 930x614 sprite sheet // Adjust these based on your actual sprite positions this.sprites = { idle: [ { x: 370, y: 15, w: 24, h: 34 }, { x: 341, y: 15, w: 24, h: 34 }, { x: 404, y: 15, w: 24, h: 34 }, { x: 341, y: 15, w: 24, h: 34 } ], walk: [ { x: 2, y: 16, w: 24, h: 34 }, { x: 28, y: 16, w: 24, h: 34 }, { x: 54, y: 16, w: 24, h: 34 }, { x: 80, y: 16, w: 24, h: 34 }, { x: 106, y: 16, w: 24, h: 34 }, { x: 132, y: 16, w: 24, h: 34 } ] }; this.currentAnimation = 'idle'; this.spriteSheet = spriteSheet; } update() { this.isMoving = false; // Horizontal movement if (input.isMovingLeft()) { this.x -= this.speed; this.direction = 'left'; this.isMoving = true; } if (input.isMovingRight()) { this.x += this.speed; this.direction = 'right'; this.isMoving = true; } // Keep player within horizontal bounds this.x = Math.max(0, Math.min(320 - this.width, this.x)); // Update animation this.updateAnimation(); } updateAnimation() { const newAnimation = this.isMoving ? 'walk' : 'idle'; if (this.currentAnimation !== newAnimation) { this.currentAnimation = newAnimation; this.frameIndex = 0; this.frameTimer = 0; } this.frameTimer++; const frames = this.sprites[this.currentAnimation]; // Usar diferentes velocidades según la animación const frameInterval = this.currentAnimation === 'walk' ? this.walkFrameInterval : this.idleFrameInterval; if (this.frameTimer >= frameInterval) { this.frameTimer = 0; this.frameIndex = (this.frameIndex + 1) % frames.length; } } draw(ctx) { const frame = this.sprites[this.currentAnimation][this.frameIndex]; ctx.save(); if (this.direction === 'left') { ctx.scale(-1, 1); ctx.drawImage( this.spriteSheet, frame.x, frame.y, frame.w, frame.h, -this.x - this.width, this.y, this.width, this.height ); } else { ctx.drawImage( this.spriteSheet, frame.x, frame.y, frame.w, frame.h, this.x, this.y, this.width, this.height ); } ctx.restore(); } }