Hey, I have the same problem, well not quite actually.

I'm making this in AS 3 and I got the parallax movement, the panning and the limits down, but they function quite shabby.

Download my SWF for an example: (CLICK start, then the window).

double-u,double,u,doubleuDOTgetloudDOTnl/bestanden/Final/Expat_jungle.swf (no links )

When you scroll up and down or left and right, the images will change a bit. The bottom image starts at x = 0 and y = 0, but when you scroll to the right and then back to the left, the image is cropped, just a tad. I assume this is due to the incremental movement and the limits.

I put this code in a class, which is quite long:

Actionscript Code:
package
{
    //Import Displays
    import flash.display.*;
   
    //Import Events
    import flash.events.*;
   
    //Import User Classes
    import com.greensock.*;
    import com.greensock.easing.*;
    import com.own.Globalvars;

    public class Mapmenu extends MovieClip
    {
        //Declare Maplevel vars
        public var mapLevel1:MapLevel1;
        public var mapLevel2:MapLevel2;
        public var mapLevel3:MapLevel3;
        public var mapLevel4:MapLevel4;
        public var mapLevel5:MapLevel5;
        //Declare Maplevel Containers
        public var mapLevelContainer:MovieClip;
        public var mapLevel1Container:MovieClip;
        public var mapLevel2Container:MovieClip;
        public var mapLevel3Container:MovieClip;
        public var mapLevel4Container:MovieClip;
        public var mapLevel5Container:MovieClip;
        //Declare interactive Premises
        public var homePremise:HomePremise;
               
        //Declare Premise Menus
        public var premiseMenu:PremiseMenu;
                               
        public function Mapmenu()
        {
            //Initialize init function
            initMap();
        }
       
        function initMap():void
        {
            //Put Maplevel movieclips in vars
            mapLevel1 = new MapLevel1();
            mapLevel2 = new MapLevel2();
            mapLevel3 = new MapLevel3();
            mapLevel4 = new MapLevel4();
            mapLevel5 = new MapLevel5();
           
            //Put them in Containers
            mapLevel1Container = new MovieClip();
            mapLevel1Container.addChild( mapLevel1 );                                  
            mapLevel2Container = new MovieClip();
            mapLevel2Container.addChild( mapLevel2 );
            mapLevel3Container = new MovieClip();
            mapLevel3Container.addChild( mapLevel3 );
            mapLevel4Container = new MovieClip();
            mapLevel4Container.addChild( mapLevel4 );
            mapLevel5Container = new MovieClip();
            mapLevel5Container.addChild( mapLevel5 );
           
            //Put the Containers on stage
            mapLevelContainer = new MovieClip;
            mapLevelContainer.addChild(mapLevel1Container);
            mapLevelContainer.addChild(mapLevel2Container);
            mapLevelContainer.addChild(mapLevel3Container);
            mapLevelContainer.addChild(mapLevel4Container);
            mapLevelContainer.addChild(mapLevel5Container);
            this.addChild(mapLevelContainer);
           
            //Position the Maplevels
            mapLevel1.y = -900;
            mapLevel2.y = -700;
            mapLevel3.y = -500;
            mapLevel4.y = -300;
            mapLevel5.y = 100;
           
            //Position the Containers
            mapLevel1Container.x = 0;
            mapLevel2Container.x = 0;
            mapLevel3Container.x = 0;
            mapLevel4Container.x = 0;
            mapLevel5Container.x = 0;
           
            //Position the main Container
            mapLevelContainer.x = 0;
           
            //Put Premise Movieclips in vars
            homePremise = new HomePremise();
           
            //Put Premise Menu Movieclips in vars
            premiseMenu = new PremiseMenu();
                       
            //Put Premisenames into a new string
            //homePremiseName = new String();
           
            //Set Buttonmode for Premises
            mapLevel5.homePremise.buttonMode = true;
                       
            addEventListener( Event.ENTER_FRAME, mapInteractivity );
            //Set up stageproperties
        }
       
        public function mapInteractivity(event:Event):void
        {
            //trace("container Y: " + mapLevelContainer.y);
            addEventListener( Event.ENTER_FRAME, scrollMovement );
            addEventListener (Event.ENTER_FRAME, premiseInteractivity );
        }
       
        private function scrollMovement ( event:Event ):void
        {
            var speed:Number = 10;
           
            if (mapLevelContainer.x < -50)
            {
                //Find stage left quarter point        
                var leftPt:uint = stage.stageWidth * .25;
                //Find the difference between mouseX and leftPt
                var leftDiff:int = mouseX - leftPt;
                //Convert it to %
                var leftPerc:Number = leftDiff / 160;
                //Move it
                if (leftDiff < 0)
                {
                    mapLevelContainer.x -= leftPerc * speed;
                    mapLevel1Container.x -= leftPerc * (speed + 0);
                    mapLevel2Container.x -= leftPerc * (speed + 7);
                    mapLevel3Container.x -= leftPerc * (speed + 14);
                    mapLevel4Container.x -= leftPerc * (speed + 21);
                    mapLevel5Container.x -= leftPerc * (speed + 28);
                }
            }
           
            if (mapLevelContainer.x > - 600)
            {
                //Find stage right quarter point
                var rightPt:uint = stage.stageWidth * .75;
                //Find the difference between mouseX and rightPt
                var rightDiff:int = mouseX - rightPt;
                //Convert it to %
                var rightPerc:Number = rightDiff / 160;
                //Move it
                if (rightDiff > 0)
                {
                    mapLevelContainer.x -= rightPerc * speed;
                    mapLevel1Container.x -= rightPerc * (speed + 0);
                    mapLevel2Container.x -= rightPerc * (speed + 7);
                    mapLevel3Container.x -= rightPerc * (speed + 14);
                    mapLevel4Container.x -= rightPerc * (speed + 21);
                    mapLevel5Container.x -= rightPerc * (speed + 28);
                   
                }
            }
           
            if (mapLevelContainer.y < 430)
            {
                //Find stage up fifth point
                var upPt:uint = stage.stageHeight * .2;
                //Find the difference between mouseY and upPt
                var upDiff:int = mouseY - upPt;
                //Convert it to %
                var upPerc:Number = upDiff / 160;
                //Move it
                if (upDiff < 0)
                {
                    mapLevelContainer.y -= upPerc * speed;
                    mapLevel1Container.y -= upPerc * (speed + 0);
                    mapLevel2Container.y -= upPerc * (speed + 7);
                    mapLevel3Container.y -= upPerc * (speed + 14);
                    mapLevel4Container.y -= upPerc * (speed + 21);
                    mapLevel5Container.y -= upPerc * (speed + 28);
                }
            }
           
            if (mapLevelContainer.y > 30)
            {
                //Find stage down fifth point
                var downPt:uint = stage.stageHeight * .8;
                //Find the difference between mouseY and downPt
                var downDiff:int = mouseY - downPt;
                //Convert it to %
                var downPerc:Number = downDiff / 160;
                //Move it
                if (downDiff > 0)
                {
                    mapLevelContainer.y -= downPerc * speed;
                    mapLevel1Container.y -= downPerc * (speed + 0);
                    mapLevel2Container.y -= downPerc * (speed + 7);
                    mapLevel3Container.y -= downPerc * (speed + 14);
                    mapLevel4Container.y -= downPerc * (speed + 21);
                    mapLevel5Container.y -= downPerc * (speed + 28);
                }
            }          
        }  
       
        public function premiseInteractivity ( event:Event):void
        {
            this.mapLevel5.homePremise.addEventListener(MouseEvent.MOUSE_OVER, onHomePremiseMouseover);
            this.mapLevel5.homePremise.addEventListener(MouseEvent.MOUSE_OUT, onHomePremiseMouseout);
            this.mapLevel5.homePremise.addEventListener(MouseEvent.CLICK, onHomePremiseClick);
        }
       
        public function onHomePremiseMouseover (event:MouseEvent):void
        {
           
           
            this.addChild(premiseMenu);
            premiseMenuPosition();
            //return homePremiseName;
            Globalvars.data.premiseName = "My home";
        }
       
        public function onHomePremiseMouseout (event:MouseEvent):void
        {
            this.removeChild(premiseMenu);
        }
       
        public function onHomePremiseClick (event:MouseEvent):void
        {
            trace("hoi");
        }
       
        public function premiseMenuPosition():void
        {
            addEventListener(Event.ENTER_FRAME, moveMouse);

            //premiseMenu.x = stage.mouseX;
            //premiseMenu.y = stage.mouseY;
            //Check if premiseMenu isn't out of bounds, if it is, place it back
            if (premiseMenu.y + premiseMenu.height > stage.stageHeight)
            {
                premiseMenu.y = stage.stageHeight - premiseMenu.height;
            }
            if (premiseMenu.y < 0)
            {
                premiseMenu.y = 0;
            }
           
            if (premiseMenu.x < 0)
            {
                premiseMenu.x = 0;
            }
            if (premiseMenu.x + premiseMenu.width > stage.stageWidth)
            {
                premiseMenu.x = stage.stageWidth - premiseMenu.width;
            }  
        }
       
        public function moveMouse(event:Event):void
        {
            //premiseMenu follows mouse
            var yEnd = mouseY;
            var xEnd = mouseX;
            var me = event.target;

            premiseMenu.x = (xEnd-me.x)/4;
            premiseMenu.y = (yEnd-me.y)/4;
        }
    }      
}

You can ignore the premiseMenu stuff, this is about the menu which pops up when you roll over the house.

The main problem here is that the image is cropped and its offset. When I remove the limit, you can see that each image (level) is wider (width) than the other. The bottom level less wide than the top level. I think this is due to the different speeds, but when I need to design it will be quite cumbersome.

Does anyone know how to resolve these problems? I have been at it for a few days, and at another Flash Community (FlashFocus) they don't really know the answer.

Thanks in advance, if you can help me, A TON OF THANKS!

All the best,

Len