|
-
Same issue here!
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
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|