I am making a game, and really the point is to swing a simple sword, or really to jab it. If you press the key "d" on the keyboard, the sword should move a in a way that it looks like a jab or stab or whatever. Here is my code:
<!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>
When I run the code, that sword movement is not working (I named the function swingForth). Can someone explain why?
What I have tried:
I have tried to look for any mistakes, but I can not find any.