I’ve been looking over other threads/tutorials to figure out what I’ve done wrong on my code to make a character jump. He jumps up just fine, but refuses to reverse direction once the character leaves the ground or you let go of the space key.
My code has gotten a bit tangled because I keep tweaking things trying to figure out where my bug is. If anyone could look at my code and point me in the right direction, I would be most appreciated!!
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.Stage;
import flash.ui.Keyboard;
public class Game extends MovieClip {
public var startMarker:StartMarker;
public var mcPlayer:Player;
public var boundaries:Boundaries;
private var vx:Number;
private var vy:Number;
private var accX:Number;
private var accY:Number;
private var speedLimit:Number;
private var rightMove:Boolean;
private var leftMove:Boolean;
private var friction:Number;
private var gravity:Number;
private var isOnGround:Boolean;
private var jumpForce;
public function Game():void {
//create player
createPlayer();
//assign default values
startMarker.visible=false;
vx=0;
vy=0;
accX = 0;
accY = 0;
speedLimit = 5;
friction=0.6;
isOnGround = undefined;
jumpForce = -16;
gravity=10;
//set focus to stage for keyboard input
stage.focus=stage;
//add event listeners
this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
}
private function enterFrameHandler(e:Event):void {
//apply acceleration;
vx += accX;
if(vx > speedLimit)
{
vx = speedLimit;
}
if(vx < -speedLimit)
{
vx = -speedLimit;
}
vy += accY;
if(vy > speedLimit * 3)
{
vy = speedLimit *3;
}
//friction
if(isOnGround)
{
vx*=friction;
}
if(Math.abs(vx) < 0.1)
{
vx = 0;
}
//gravity
mcPlayer.y+=gravity;
//process collisions
processCollisions();
//move player
mcPlayer.x+=vx;
mcPlayer.y+=vy;
//scroll stage
scrollStage();
//jumping
if(!isOnGround)
{
accY = 16;
}
}
private function keyDownHandler(event:KeyboardEvent):void {
//if player movng remove friction
friction = 1;
if (event.keyCode==37) {
//trace("Key left is down");
leftMove=true;
accX = -4;
}
if (event.keyCode==39) {
//trace("Key right is down");
rightMove=true;
accX = 4;
}
if (event.keyCode==32) {
//jump code
if(isOnGround)
{
accY = jumpForce;
isOnGround = false;
}
}
}
private function keyUpHandler(event:KeyboardEvent):void {
friction = 0.8;
if (event.keyCode==37) {
//trace("Key left is up");
leftMove=false;
accX = 0;
}
if (event.keyCode==39) {
//trace("Key right is up");
rightMove=false;
accX = 0;
}
if (event.keyCode==32) {
accY = 0;
}
}
private function createPlayer():void {
mcPlayer = new Player();
stage.addChild(mcPlayer);
mcPlayer.x=startMarker.x;
mcPlayer.y=startMarker.y;
}
private function processCollisions():void {
if (boundaries.hitTestPoint(mcPlayer.x,mcPlayer.y,true)) {
mcPlayer.y=boundaries.y;
isOnGround = true;
}
}
private function scrollStage():void {
}
}
}