boblandess
asked on
Horizontal and vertical pan
How can I make this code work for a vertical pan (up and down) ? I have tried changing all the settings from x to y and stage.stageWidth to stage.stageHeight but didn't work.
// source of code, http://www.kirupa.com/forum/showthread.php?281665-Interactive-Image-Panning-(flash-cs3-as3-version)
import flash.display.*;
import flash.events.*;
constrainedMove(bg_mc, 2, 1);
function constrainedMove(target:MovieClip, speed:Number, dir:int){
var mousePercent:Number = mouseX / stage.stageWidth;
stage.addEventListener(MouseEvent.MOUSE_MOVE, panImage);
target.cacheAsBitmap = true;
function panImage(E:MouseEvent):void {
var mSpeed:Number;
mousePercent = mouseX / stage.stageWidth;
if (dir == 1) {
mSpeed = 1 - mousePercent;
} else {
mSpeed = mousePercent;
}
target.destX = Math.round(-((target.width - stage.stageWidth) * mSpeed));
if(target.hasEventListener(Event.ENTER_FRAME)){
target.removeEventListener(Event.ENTER_FRAME, del);
}
target.addEventListener(Event.ENTER_FRAME, del);
E.updateAfterEvent();
}
function del(E:Event):void {
if (Math.abs(target.x - target.destX) <= 1) {
target.x = Math.round(target.destX);
target.removeEventListener(Event.ENTER_FRAME, arguments.callee);
} else {
target.x += (target.destX - target.x) * (speed / 100);
}
}
}
Make sure you image larger than height and add stage height handler
this.onMouseMove = function() {
constrainedMove(bg_mc, 4, 1);
};
function constrainedMove(target:Mov ieClip, speed:Number, dir:Number) {
var mousePercentX:Number = _xmouse/Stage.width;
var mousePercentY:Number = _ymouse/Stage.height;
var xSpeed:Number, ySpeed:Number;
if (dir == 1) {
xSpeed = 1-mousePercentX;
ySpeed = 1-mousePercentY;
} else {
xSpeed = mousePercentX;
ySpeed = mousePercentY;
}
target.destX = Math.round(-((target._widt h-Stage.wi dth)*xSpee d));
target.destY = Math.round(-((target._heig ht-Stage.h eight)*ySp eed));
target.onEnterFrame = function() {
trace(target._x +"+"+ target.destX)
trace(target._y +"+"+ target.destY)
if (target._x == target.destX && target._y == target.destY) {
delete target.onEnterFrame;
} else if (target._x>target.destX) {
target._x -= Math.ceil((target._x-targe t.destX)*( speed/100) );
} else if (target._x<target.destX) {
target._x += Math.ceil((target.destX-ta rget._x)*( speed/100) );
}
if (target._y>target.destY) {
target._y -= Math.ceil((target._y-targe t.destY)*( speed/100) );
} else if (target._x<target.destY) {
target._y += Math.ceil((target.destY-ta rget._y)*( speed/100) );
}
};
}
this.onMouseMove = function() {
constrainedMove(bg_mc, 4, 1);
};
function constrainedMove(target:Mov
var mousePercentX:Number = _xmouse/Stage.width;
var mousePercentY:Number = _ymouse/Stage.height;
var xSpeed:Number, ySpeed:Number;
if (dir == 1) {
xSpeed = 1-mousePercentX;
ySpeed = 1-mousePercentY;
} else {
xSpeed = mousePercentX;
ySpeed = mousePercentY;
}
target.destX = Math.round(-((target._widt
target.destY = Math.round(-((target._heig
target.onEnterFrame = function() {
trace(target._x +"+"+ target.destX)
trace(target._y +"+"+ target.destY)
if (target._x == target.destX && target._y == target.destY) {
delete target.onEnterFrame;
} else if (target._x>target.destX) {
target._x -= Math.ceil((target._x-targe
} else if (target._x<target.destX) {
target._x += Math.ceil((target.destX-ta
}
if (target._y>target.destY) {
target._y -= Math.ceil((target._y-targe
} else if (target._x<target.destY) {
target._y += Math.ceil((target.destY-ta
}
};
}
ASKER
Thanks but I am doing this in AS3.
Math functions will work in AS3 as well :)
The same in AS3
stop();
var speed:Number = 4;
var dir:Number = 1;
stage.addEventListener(Mou seEvent.MO USE_MOVE, mouseMoveHandler);
function enterFrameHanlder(event:Ev ent):void {
var target:MovieClip = event.target;
if (target.x == target.destX && target.y == target.destY) {
target.removeEventListener (Event.ENT ER_FRAME, enterFrameHanlder);
} else if (target.x>target.destX) {
target.x -= Math.ceil((target.x-target .destX)*(s peed/100)) ;
} else if (target.x<target.destX) {
target.x += Math.ceil((target.destX-ta rget.x)*(s peed/100)) ;
}
if (target.y > target.destY) {
target.y -= Math.ceil((target.y-target .destY)*(s peed/100)) ;
} else if (target.x<target.destY) {
target.y += Math.ceil((target.destY-ta rget.y)*(s peed/100)) ;
}
};
function mouseMoveHandler(event:Mou seEvent) {
var target:MovieClip = bg_mc;
var mousePercentX:Number = stage.mouseX/stage.stageWi dth;
var mousePercentY:Number = stage.mouseY/stage.stageHe ight;
var xSpeed:Number, ySpeed:Number;
if (dir == 1) {
xSpeed = 1-mousePercentX;
ySpeed = 1-mousePercentY;
} else {
xSpeed = mousePercentX;
ySpeed = mousePercentY;
}
target.destX = Math.round(-((target.width -stage.sta geWidth)*x Speed));
target.destY = Math.round(-((target.heigh t-stage.st ageHeight) *ySpeed));
target.addEventListener(Ev ent.ENTER_ FRAME, enterFrameHanlder);
}
stop();
var speed:Number = 4;
var dir:Number = 1;
stage.addEventListener(Mou
function enterFrameHanlder(event:Ev
var target:MovieClip = event.target;
if (target.x == target.destX && target.y == target.destY) {
target.removeEventListener
} else if (target.x>target.destX) {
target.x -= Math.ceil((target.x-target
} else if (target.x<target.destX) {
target.x += Math.ceil((target.destX-ta
}
if (target.y > target.destY) {
target.y -= Math.ceil((target.y-target
} else if (target.x<target.destY) {
target.y += Math.ceil((target.destY-ta
}
};
function mouseMoveHandler(event:Mou
var target:MovieClip = bg_mc;
var mousePercentX:Number = stage.mouseX/stage.stageWi
var mousePercentY:Number = stage.mouseY/stage.stageHe
var xSpeed:Number, ySpeed:Number;
if (dir == 1) {
xSpeed = 1-mousePercentX;
ySpeed = 1-mousePercentY;
} else {
xSpeed = mousePercentX;
ySpeed = mousePercentY;
}
target.destX = Math.round(-((target.width
target.destY = Math.round(-((target.heigh
target.addEventListener(Ev
}
ASKER
dgofman, I get this error when using the code fro your last post.
1118: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:MovieClip.
1118: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:MovieClip.
ASKER
No matter what I do I still get the arror, 1118: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:MovieClip. Even when I use your code and objects in a new scene.
I am using AS3 Flash Pro CS4.
I am using AS3 Flash Pro CS4.
I attached Fla file fie CS4 run my example or upload your file
ASKER
I downloaded the attached file and it works. However if I paste your code into my .fla or a new .fla I get the error code, 1118: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:MovieClip.
imagePan-final-Mine.fla
imagePan-final-Mine.fla
Interesting why my FLA file doesn't show same warning.
Anyway change explicit cast to MovieClip I expected you will able to figure out yourself
function enterFrameHanlder(event:Ev ent):void {
var target:MovieClip = event.target as MovieClip;
Anyway change explicit cast to MovieClip I expected you will able to figure out yourself
function enterFrameHanlder(event:Ev
var target:MovieClip = event.target as MovieClip;
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Got it. Thanks for all your help.
Can you upload your FLA in CS4 or image?