Hi Guys

So, I'm making a 2-d game engine just to help myself learn a little JavaScript. It was all going great until I started getting into collision detection and the tutorials went into 2-d vectors but didn't explain why they were needed in a wider context. Personally, I'm assuming it's because they would want to calculate the last position of an object and the direction of travel or maybe the angle of approach for post hit calculations that might need to be done (for example, a bullet ricochet?). I also need a little help in understanding exactly what this function is doing, as there are many parts to it that I am not familiar with. So, here's the vector function:

Code:
vector2=function(x,y){
    this.x=0;
    this.y=0;

    if (x != null)
        this.x=x;
    if (y != null)
        this.y=y;

    this.previousX= 0;
    this.previousY= 0;

    this.set = function(x,y){
        if (x == null && y == null){
            console.log("no x or y has been passed to vector2s set function")
        }else{
                this.previousX=this.x;
                this.previousY=this.y;
            if (x !=null){               
                this.x=x
            }
             if (y !=null){               
                this.y=y
        }
    }
    };
    this.normalize = function(){
        var tmp = new vector2(this.x, this.y);
        var mag = Math.sqrt((tmp.x*tmp.x) + (tmp.y*tmp.y));
        tmp.x = tmp.x /mag;
        tmp.y = tmp.y /mag;

        return tmp;
    };
    this.distance = function(vec2){
        if(vec2 !=null)
            return Math.sqrt(((vec2.x-this.x) * (vec2.x - this.x)) + ((this.y-vec2.y) * (this.y - vec2.y)));
        else
            return Math.sqrt(((this.previousX - this.x) * (this.previousX - this.x)) + ((this.previousY - this.y) * (this.previousY - this.y)));

    };

    this.hasChanged = function(){
        if (this.x != this.previousX || this.y != this.previousY)
            return true;
        
            return false;

    };

    this.difference = function(vec2){
        
    var inv = 1;

    if (invert)
        inv = -1;

        if(vec2 == null){
            return new vector2((this.x = this.previousX) * inv, (this.y - this.previousY) * inv);
        }else
            return new vector2((this.x - vec2.x) * inv,  (this.y - vec2.y) * inv);
    };
};

So, broadly what I want to know is:
  • Why are vectors useful in 2d games and what would the alternative be to using them?
  • What do the other parts of the function do (set, normalise, distance, hasChanged, difference)?
  • Why isn't it possible to just tell my player object not to move if he intersects an object? Why complicate things with vectors?


So thanks ahead of time as always and please go easy on me as I realize some of you may see this as a noob question about basic geometry!