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:
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;
}
}