actionscript-2game-developmentflash-cs6

Tile based movement on Actionscript 2.0 (adobe flash cs6)


So I have got this problem where I do not know how to possible code tile based movement in 4 directions (NSWE) for action script 2.0.

I have this code but it is dynamic movement, which makes the char move in all 8 directions (NW,NE,SW,SE N,S,W,E). The goal is to limit the movements to tile based and in only 4 directions (NSEW)

 onClipEvent(enterFrame)
{
    speed=5;
    if(Key.isDown(Key.RIGHT))
    {
        this.gotoAndStop(4);
        this._x+=speed;
    }
    if(Key.isDown(Key.LEFT))
    {
        this.gotoAndStop(3);
        this._x-=speed;
    }
    if(Key.isDown(Key.UP))
    {
        this.gotoAndStop(1);
        this._y-=speed;
    }
    if(Key.isDown(Key.DOWN))
    {
        this.gotoAndStop(2);
        this._y+=speed;
    }
}

Solution

  • The most simple and straightforward way is to move that thing along X-axis OR along Y-axis, only one at a time, not both.

    onClipEvent(enterFrame)
    {
        speed = 5;
    
        dx = 0;
        dy = 0;
    
        // Figure out the complete picture of keyboard input.
    
        if (Key.isDown(Key.RIGHT))
        {
            dx += speed;
        }
    
        if (Key.isDown(Key.LEFT))
        {
            dx -= speed;
        }
    
        if (Key.isDown(Key.UP))
        {
            dy -= speed;
        }
    
        if (Key.isDown(Key.DOWN))
        {
            dy += speed;
        }
    
        if (dx != 0)
        {
            // Move along X-axis if LEFT or RIGHT pressed.
            // Ignore if it is none or both of them.
    
            this._x += dx;
    
            if (dx > 0)
            {
                this.gotoAndStop(4);
            }
            else
            {
                this.gotoAndStop(3);
            }
        }
        else if (dy != 0)
        {
            // Ignore if X-axis motion is already applied.
            // Move along Y-axis if UP or DOWN pressed.
            // Ignore if it is none or both of them.
    
            this._y += dy;
    
            if (dy > 0)
            {
                this.gotoAndStop(2);
            }
            else
            {
                this.gotoAndStop(1);
            }
        }
    }