i've amended my code as follows - seems to have sorted the problem out

in a nutshell, i multiplied the y axis by 83.333 percent (or the actual rectangle height / square height) and sorted out the way the last frame is chosen (which turned out to be a lot simpler than i originally did it)


//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

//REMOVED
//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

/* REPLACED
                if (distanceFromEdge < blurDifference) {
                        if (frame % 2 == 0) {
                                if (frame<16) frame++;
                        }
                } else if ((degreesPerSlice - distanceFromEdge) < 
blurDifference) {
                        if (frame % 2 == 0) {
                                if (frame>1) frame--;
                        }
                }
*/
                if (distanceFromEdge < blurDifference) {
                        if (frame % 2 == 0) {
                                frame++;
                                if (frame == 17) frame = 1;
                        }
                }

                clip["people"+frame]._visible = true;
                visibleClip = ["people"+frame];
        } else {
                clip.people17._visible = true;
                visibleClip = "people17";
        }
}

_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to