<quote>however, because the actual shape is a rectangle, i think there's an issue </quote>
What exactly is the issue you're seeing? I think you may be over-complicating it. If the angles that your people look are in 45 degree increments then that's how your angles should be calculated - i.e. using the square. Adrian On Feb 18, 2008 1:09 PM, Allandt Bik-Elliott (Receptacle) < [EMAIL PROTECTED]> wrote: > hey guys - i have a question that i really hope someone can answer > > i have a flash banner that i'm working on that is 300px wide x 250px > deep > > i have done a mouse follower that tracks the where the mouse is and > then chooses a frame of animation to show so that the people are > always looking at the mouse (roughly) > http://www.receptacledesign.com/portfolio/theonlinestudio/herbalessence/ > > this gives a square (actually a circle but we'll used a square for > this) sliced into 8 > http://www.receptacledesign.com/publicfiles/area1.gif > > however, because the actual shape is a rectangle, i think there's an > issue with the movie choosing a frame for the corners as they're > getting cut off like this: > http://www.receptacledesign.com/publicfiles/area2.gif > > could anyone tell me how i should amend my maths to make my rectangle > slice more like this: > http://www.receptacledesign.com/publicfiles/area3.gif > > here is my code (note: there is a blurred 'overlap' between the > frames of animation that is governed by the blurDifference variable > as well) > > //variables > var originX:Number = 200; // middle of x axis when not expanded > var originY:Number = 225; // middle of y axis when not expanded > var visibleClip = "people17"; // initialised at people17 > var clip:MovieClip = content_mc; // clip reference > var blurDifference:Number = 13; // between 1 and 13 - 1 is the most, > 13 the least > var degreesPerSlice:Number = 360/8; // 45 degrees > var centerArea:Number = 40; // centre area for the people to look > directly at the user > > //mouse listener object > mouseListener.onMouseMove = function () { > mouseMoved = true; // stop randomly looking > if (mouseMoveEnabled) { > lookAt(clip, originX, originY, _root._xmouse, > _root._ymouse); > } > //rollover on whole movie > if (!expandTime && roll_mc.hitTest(_root._xmouse, _root._ymouse)) { > expandTime = getTimer() + expandTimeToWait; > } > updateAfterEvent(); > } > Mouse.addListener(mouseListener); > > //maths to find where mouse pointer is in relation to the origin > function lookAt (clip:MovieClip, originX:Number, originY:Number, > watchX:Number, watchY:Number):Void { > var adjside:Number = a = watchX - originX; > var b:Number = watchY - originY; > var oppside:Number = -1*b; > var angle:Number = Math.atan2(oppside, adjside); // in radians > var angle:Number = Math.round(angle/Math.PI*180); // convert to > degrees > var angle:Number = -1*(angle); // invert > var angle:Number = angle + (degreesPerSlice/2); // add half of > degreesPerSlice to correct eye level - will probably be removed when > maths is corrected > var c:Number = Math.sqrt((a*a)+(b*b)); // pythagoras a2+b2=c2 to > find distance of mouse cursor from origin > changeFrame(clip, angle, c); > } > > > //image frame selector > function changeFrame(clip:MovieClip, angle:Number, > distance:Number):Void { > idleChangeTime = getTimer() + idleChangeRate; > for (var i:Number=1; i<18; i++) { > clip["people"+i]._visible = false; > } > if (distance>centerArea) { > if (angle<0) { > angle = 360+angle; > } > var degreesPerSlice:Number = degreesPerSlice; > var halfDegreesPerSlice:Number = degreesPerSlice/2; > var blurDifference:Number = blurDifference; > var frame:Number = Math.ceil(angle/halfDegreesPerSlice); > var frameEdges:Number = Math.ceil(angle/degreesPerSlice); > // looks > for edges of (non-blurred) frames > var distanceFromEdge:Number = (frameEdges*degreesPerSlice) > - > (angle); // find distance from edge of slice > if (distanceFromEdge < blurDifference) { > if (frame % 2 == 0) { > if (frame<16) frame++; > } > } else if ((degreesPerSlice - distanceFromEdge) < > blurDifference) { > if (frame % 2 == 0) { > if (frame>1) frame--; > } > } > clip["people"+frame]._visible = true; > visibleClip = ["people"+frame]; > } else { > clip.people17._visible = true; > visibleClip = "people17"; > } > } > > really stuck on this so any help you can give me will be great > > thanks > _______________________________________________ > Flashcoders mailing list > Flashcoders@chattyfig.figleaf.com > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > _______________________________________________ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders