Skip to main content
Bumped by Community user
added 66 characters in body
Source Link
Source Link

Making a 2d shooting game. need a working shoot function

I tried to follow some guides but couldn't get their functions to work in my program. What i tried is commented out in my code(the for loop). I want a working function on space press create a bullet that goes right.

code:

<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<style>
canvas {
    border:4px solid #d3d3d3;
    background-color: #f1f1f1;
}
</style>
</head>
<body onload="startGame()">
<script>

var myGamePiece;
var endGoalPiece;
var Enemy1;
var bullet;

function startGame() {
    myGameArea.start();
    myGamePiece = new component(30, 30, "red", 0, 240);
    endGoalPiece = new component(30, 30, "black", 450, 240);
    myEnemy1 = new component(30, 30, "green", 200, 240);
}

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.interval = setInterval(updateGameArea, 20);
        window.addEventListener('keydown', function (e) {
            myGameArea.key = e.keyCode;
        })
        window.addEventListener('keyup', function (e) {
            myGameArea.key = false;
        })
    },
    clear : function(){
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
    }
}

function component(width, height, color, x, y) {
    this.gamearea = myGameArea;
    this.width = width;
    this.height = height;
    this.speedX = 0;
    this.speedY = 0;
    //this.gravity = 0.05;
    //this.gravitySpeed = 0;
    this.x = x;
    this.y = y;
    this.color = color;
    this.update = function() {
        ctx = myGameArea.context;
        ctx.fillStyle = this.color;
        ctx.fillRect(this.x, this.y, this.width, this.height);
    }
    this.newPos = function() {
        this.gravitySpeed += this.gravity;
        this.x += this.speedX;
        this.y += this.speedY; //+ this.gravitySpeed;
        this.hitBottom();
        this.hitTop();
        this.hitRight();
        this.hitLeft();
        
    }
   
   this.hitBottom = function() {
        var rockbottom = myGameArea.canvas.height - this.height;
        if (this.y > rockbottom) {
            this.y = rockbottom;
            
        }
        }
        this.hitTop = function() {
        var rockTop = 0;
        if (this.y < rockTop) {
            this.y = rockTop;
            
        }
        }
        this.hitRight = function() {
        var rockRight = myGameArea.canvas.width - this.width;
        if (this.x > rockRight) {
            this.x = rockRight;
            
        }
        }
        this.hitLeft = function() {
        var rockLeft = 0;
        if (this.x < rockLeft) {
            this.x = rockLeft;
            
        }
        }

function jump() {
  myGamePiece.gravitySpeed=-1;
}

}
 function shootGun(){
 
//var b = new bullet();
//var bullets = []
//bullets.push(b)
 
//for (var i = 0; i < bullets.length; i++) {
 bullet = new component(11, 5, "blue", myGamePiece.x+27 , myGamePiece.y+13 );
 bullet.newPos();
 bullet.speedX=1;
 }


function updateGameArea() {
    myGameArea.clear();
    myGamePiece.speedX = 0;
    myGamePiece.speedY = 0;
    if (myGameArea.key && myGameArea.key == 37) {myGamePiece.speedX = -1; }//left
    if (myGameArea.key && myGameArea.key == 39) {myGamePiece.speedX = 1; }//right
    if (myGameArea.key && myGameArea.key == 38) {myGamePiece.gravitySpeed = -1; }//jump
    if (myGameArea.key && myGameArea.key == 32) {shootGun()}//shoot gun
   //if (myGameArea.key && myGameArea.key == 40) {myGamePiece.speedY = 1; }// down
    myEnemy1.update();
    endGoalPiece.update();
    myGamePiece.newPos();
    myGamePiece.update();
    bullet.newPos();
    bullet.update();
}
</script>
<p>use the arrow keys on you keyboard to move the red square.</p>
</body>
</html>

I expect on space press for a bullet to keep being created like shooting a gun. but at the moment only 2 bullet is made then if you press space again it resets the bullet. I get why this is happening but cant get my for loop to work. I will add something to happen if it hits a enemy later.