Hello!

I made a platform game and the hittest works fine when the player is on top of the platform or hits the side of it.
but sometimes it just passes through the walls.
also when I jump from underneath a platform it doesn't stop the player.

what am i doing wrong?


This is my code:

Actionscript Code:
package  {
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.events.Event;
   
public class Game extends MovieClip{
var speedmax:Number=10;
var speed:Number=0;
var gravity:Number=0;
var increase:Number=1.1;
var decrease:Number=1.1;
var jumpheight:Number=12;
var falling:Boolean=true;
var varRight:Boolean=false;
var varLeft:Boolean=false;
var varUp:Boolean=false;
    var varDown:Boolean=false;
    var walljumpleft:Boolean=false;
    var walljumpright:Boolean=false;
    var walljumpdirection:Number=13;//variables
   
        public function Game() {
            player.addEventListener(Event.ENTER_FRAME,  playerMovement);
            player.addEventListener(Event.ENTER_FRAME,  wallJump);
            player.addEventListener(Event.ENTER_FRAME, gravitySystem);
            level.addEventListener(Event.ENTER_FRAME, playerCollision);
            stage.addEventListener(KeyboardEvent.KEY_DOWN , checkKeys);
            stage.addEventListener(KeyboardEvent.KEY_UP, keyUps);//addEventListeners
           
        }
       
       
function checkKeys(event:KeyboardEvent) {
    if (event.keyCode==39) {
        varRight=true;
    }
    if (event.keyCode==38) {
        varUp=true;
    }
    if (event.keyCode==37) {
        varLeft=true;
    }
}//checkKeys function

function keyUps(event:KeyboardEvent) {
    if (event.keyCode==39) {
        event.keyCode=0;
        varRight=false;
    }
    if (event.keyCode==38) {
        event.keyCode=0;
        varUp=false;
    }
    if (event.keyCode==37) {
        event.keyCode=0;
        varLeft=false;
    }
    if (event.keyCode==40) {
        event.keyCode=0;
        varDown=false;
    }
}//keyUps function

function gravitySystem(evt:Event) {
    evt.target.y+=gravity;
    gravity+=increase;
}//gravitySystem function

function playerMovement(evt:Event) {
    if (speed>=speedmax) {
        speed=speedmax;
    }
    if (speed<=- speedmax) {
        speed=- speedmax;
    }
    evt.target.x+=(speed/=decrease);
    if (varRight==true) {
        speed+=increase;
    }
    if (varUp==true&&falling==false) {
        evt.target.y-=jumpheight;
        gravity=- jumpheight;
        falling=true;
    }
    if (varLeft==true) {
        speed-=increase;
    }
   
}//playerMovement function

function playerCollision(evt:Event) {
    if (evt.target.hitTestPoint(player.x, player.y+player.height/2, true)) {
        falling=false;
        gravity=0;
        player.y--;
    }
    if (evt.target.hitTestPoint(player.x, player.y-player.height/2, true)) {
        player.y++;

    }
    if (evt.target.hitTestPoint(player.x-player.width/2, player.y, true)) {
        speed=0;
        player.x++;
        if (varRight==true) {
            walljumpright=true;
            walljumpleft=false;
            walljumpdirection=14;
        }
    }
    if (evt.target.hitTestPoint(player.x+player.width/2, player.y, true)) {
        speed=0;
        player.x--;
        if (varLeft==true) {
            walljumpleft=true;
            walljumpright=false;
            walljumpdirection=14;
        }

    }
}//playerCollision function

function wallJump(evt:Event) {
    if (walljumpright==true&&falling==true) {
        evt.target.x+=walljumpdirection;
        evt.target.y-=walljumpdirection;

    }
    if (walljumpleft==true&&falling==true) {
        evt.target.x-=walljumpdirection;
        evt.target.y-=walljumpdirection;

    }
    walljumpdirection/=1.2;
}//wallJump function

    }
   
}

Thanks!