Tile Based Movement in AS3
Hello i am still trying to create tile based movement. What i mean by that is the character can move smoothly but will always end up in the middle of a tile (just like the pokemon games). I have managed to make it work if the player uses only one key, however in combination with other keys it does not work. I was hoping someone could give me advise how to fix the code or perhaps some better/easier way to do it.
Here is my code so far (this is only for left and right key) my character movieclip has the instance name char
import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
import flash.events.Event;
import fl.transitions.easing.*;
import com.greensock.*;
var pixelsMoved:Number = 0;
var pixelsLeft:Number = 0;
var tweening:Boolean = false;
var rightKeyDown:Boolean = false;
var leftKeyDown:Boolean = false;
addEventListener(Event.ENTER_FRAME,Loop);
stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyPress);
stage.addEventListener(KeyboardEvent.KEY_UP,KeyRelease);
function Loop(event:Event):void
{
if (tweening == false)
{
if (rightKeyDown == true)
{
char.x += 1;
pixelsMoved += 1;
}
else if (leftKeyDown == true)
{
char.x -= 1;
pixelsMoved += 1;
}
if (pixelsMoved >= 25)
{
pixelsMoved = 0;
pixelsLeft = 25;
}
}
}
function KeyPress(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.RIGHT)
{
rightKeyDown = true;
}
if (event.keyCode == Keyboard.LEFT)
{
leftKeyDown = true;
}
}
function KeyRelease(event:KeyboardEvent):void
{
pixelsLeft = 25 - pixelsMoved;
if (event.keyCode == Keyboard.RIGHT)
{
if (tweening == false)
{
var moveRight:TweenLite = new TweenLite(char,pixelsLeft,{x:char.x + pixelsLeft,ease:None.easeNone,useFrames: true,onComplete: resetVars});
}
rightKeyDown = false;
tweening = true;
}
if (event.keyCode == Keyboard.LEFT)
{
if (tweening == false)
{
var moveLeft:TweenLite = new TweenLite(char,pixelsLeft,{x:char.x - pixelsLeft,ease:None.easeNone,useFrames: true,onComplete: resetVars});
}
leftKeyDown = false;
tweening = true;
}
}
function resetVars():void
{
tweening = false;
pixelsLeft = 0;
pixelsMoved = 0;
}
Any help is much apreciated!
