Как мне исправить эту проблему с моей игрой
Я делаю игру, и на самом деле смысл в том, чтобы размахивать простым мечом или действительно вонзать его. Если вы нажмете клавишу " d " на клавиатуре, меч должен двигаться так, чтобы это выглядело как укол, удар или что-то еще. Вот мой код:
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <style> canvas { border:1px solid #d3d3d3; background-color: #f1f1f1; } </style> </head> <body onload="startGame()"> <script> var myGamePiece, sword; function startGame() { sword = new component(29, 5, "orange", 225, 225); myGamePiece = new component(30, 30, "blue", 225, 225); myGameArea.start(); } var myGameArea = { canvas : document.createElement("canvas"), start : function() { this.canvas.width = 480; this.canvas.height = 270; this.context = this.canvas.getContext("2d"); document.body.insertBefore(this.canvas, document.body.childNodes[0]); this.frameNo = 0; this.interval = setInterval(updateGameArea, 20); window.addEventListener('keydown', function (e) { e.preventDefault(); myGameArea.keys = (myGameArea.keys || []); myGameArea.keys[e.keyCode] = (e.type == "keydown"); }) window.addEventListener('keyup', function (e) { myGameArea.keys[e.keyCode] = (e.type == "keydown"); }) }, stop : function() { clearInterval(this.interval); }, clear : function() { this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); } } function component(width, height, color, x, y, type) { this.type = type; this.width = width; this.height = height; this.speed = 0; this.angle = 0; this.moveAngle = 0; this.x = x; this.y = y; this.update = function() { ctx = myGameArea.context; ctx.save(); ctx.translate(this.x, this.y); ctx.rotate(this.angle); ctx.fillStyle = color; ctx.fillRect(this.width / -2, this.height / -2, this.width, this.height); ctx.restore(); } this.newPos = function() { this.angle += this.moveAngle * Math.PI / 180; this.x += this.speed * Math.sin(this.angle); this.y -= this.speed * Math.cos(this.angle); } } function updateGameArea() { myGameArea.clear(); myGamePiece.moveAngle = 0; myGamePiece.speed = 0; if (myGameArea.keys && myGameArea.keys[37]) {myGamePiece.x -=2; sword.x -=2 ;} if (myGameArea.keys && myGameArea.keys[39]) {myGamePiece.x += 2; sword.x += 2;} if (myGameArea.keys && myGameArea.keys[38]) {myGamePiece.y -= 1; sword.y -= 1;} if (myGameArea.keys && myGameArea.keys[40]) {myGamePiece.y += 1; sword.y += 1} if (myGameArea.keys && myGameArea.keys[83]) {jumping()} if (myGameArea.keys && myGameArea.keys[68]) {swingForth()} sword.newPos(); sword.update(); myGamePiece.newPos(); myGamePiece.update(); } var swingForth = function(){ sword.x + = 3} setTimeout(swordReturn, 100) } var swordReturn = function(){ sword.x = myGamePiece.x sword.y = myGamePiece.y } var jumping = function(){ myGamePiece.y -=3 sword.y -=3 setTimeout(falling, 100) } var falling = function(){ myGamePiece.y += 3 sword.y +=3 } </script> <p></p> </body> </html>
Когда я запускаю код, это движение меча не работает (я назвал функцию swingForth). Может кто-нибудь объяснить почему?
Что я уже пробовал:
Я пытался искать какие-либо ошибки, но не могу найти ни одной.