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!