# Vertical Wall Collision Help

**URL:** <https://forum.kirupa.com/t/vertical-wall-collision-help/323486>\
**Category:** flash\
**Created:** [July 4, 2011, 2:40am UTC](https://forum.kirupa.com/t/vertical-wall-collision-help/323486 "2011-07-04T02:40:47Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![MoonSky356](https://avatars.discourse-cdn.com/v4/letter/m/ac8455/32.png) [@MoonSky356](https://forum.kirupa.com/u/MoonSky356)\
**Post date:** [July 4, 2011, 2:40am UTC](https://forum.kirupa.com/t/vertical-wall-collision-help/323486/1 "2011-07-04T02:40:47Z")

</div>

Hey guys and gals of the forums!  
I’m new to ActionScript 3.0 and I’m having trouble with collision, specifically with vertical walls. Whenever I move my character into a vertical wall (I’m making a flash game by the way), it would always teleport the character to the top of the platform from where the vertical slope comes down from. Is there a way to make my character hit the wall vertically and stopping without having me to constrain the character within a certain boundary of the stage?

Here’s my code so far:

```auto
import flash.events.Event;
import flash.events.KeyboardEvent;

var leftKeyDown:Boolean = false;
var rightKeyDown:Boolean = false;
var upKeyDown:Boolean = false;
var downKeyDown:Boolean = false;
var xSpeed:Number = 0;
var ySpeed:Number = 0;
var mainSpeed:Number = 0.5;
var frictionPower:Number = 0.8;
var gravityPower:Number = 1;
var terminalVelocity:Number = 20;

stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeysDown);
stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp);
stage.addEventListener(Event.ENTER_FRAME, hitTest);
stage.addEventListener(Event.ENTER_FRAME, Main);

function Main(event:Event)
{
    moveCharacter();
    dynamicMovement();
}

function checkKeysDown(event:KeyboardEvent)
{
    if (event.keyCode == 37)
    {
        leftKeyDown = true;
    }
    if (event.keyCode == 38)
    {
        upKeyDown = true;
    }
    if (event.keyCode == 39)
    {
        rightKeyDown = true;
    }
    if (event.keyCode == 40)
    {
        downKeyDown = true;
    }
}

function checkKeysUp(event:KeyboardEvent)
{
    if (event.keyCode == 37)
    {
        leftKeyDown = false;
    }
    if (event.keyCode == 38)
    {
        upKeyDown = false;
    }
    if (event.keyCode == 39)
    {
        rightKeyDown = false;
    }
    if (event.keyCode == 40)
    {
        downKeyDown = false;
    }
}

function moveCharacter()
{
    if (leftKeyDown)
    {
        xSpeed -= mainSpeed;
    }
    if (rightKeyDown)
    {
        xSpeed += mainSpeed;
    }
    if (upKeyDown)
    {
        ySpeed -= 7;
    }
}

function dynamicMovement()
{
    mcMain.x += xSpeed;
    xSpeed *= frictionPower;

    if (xSpeed > 3)
    {
        xSpeed = 3;
    }

    mcMain.y += ySpeed;
    ySpeed += gravityPower;

    if (ySpeed > terminalVelocity)
    {
        ySpeed = terminalVelocity;
    }
}

wallCollision.visible = false;

function hitTest(event:Event)
{
    while (wallCollision.hitTestPoint(mcMain.x,mcMain.y,true))
    {
        mcMain.y--;
    }
    if (! wallCollision.hitTestPoint(mcMain.x,mcMain.y + 1,true))
    {
        upKeyDown = false;
    }
    if (wallCollision.hitTestPoint(mcMain.x,mcMain.y + 1,true))
    {
        ySpeed = 0;
    }
}

```
