Hello,

Looks like the attachment did not go out. I've pasted the Actionscript into this e-mail.

Cheers,

- Bill

/*      
        Simple 3D Plane - v1.0
        ------------------------------------------------------------
        
        Created : January 24, 2007
        Last Updated : May 18, 2007
        
        Copyright © 2007 Pixlart.  All rights reserved.

        http://www.pixlart.net
        info [at] pixlart [dot] net
*/


/////////////////////////////////////////////////////////////// \\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
/*
DESCRIPTION Allows you to animate MovieClips and Bitmaps on a 3D plane with full control and easing.


        AUTHOR(s)                       Bill Mackin - http://www.billmackin.com
                                                                Combination of 
scripts and development of 3D animation API.

• Marquee Flipper - Which provided a good starting point and combination of World3d and DistortImage.
                                                                ----    Felix 
Turner - http://www.airtightinteractive.com
                                                                •       Simple 3d Engine 
"World3d" - A very basic "light" 3D engine.
                                                                ----    André 
Michelle - http://www.andre-michelle.com
• DistortImage - A class to distort an image (including persective distortions) by slicing the image into smaller pieces (generally triangles). ---- Thomas Pfeiffer "kiroukou" - http://www.thomas- pfeiffer.info
                                                                ----    Richard Lester 
"RichL"
                                                                ----    Didier Brun 
"foxy" - http://www.foxaweb.com
• Easing Equations - Popular equations used by many to provide easing effects in scripted animations.
                                                                ----    Robert 
Penner - http://www.robertpenner.com

------------------------------------------------------------ ------------------------------------------------------------
        USAGE
------------------------------------------------------------ ------------------------------------------------------------
        var myCreationSettings:Object = {
                myName:"3DCircleOnCavill",
                libraryLink:"CircleOnCavill",
                scope:this,
                xAxisStart:0,
                yAxisStart:0,
                mouseReactive:false,
                vQuality:3,
                hQuality:3
        }
        var my3Dplane:Simple3DPlane = new Simple3DPlane(myCreationSettings);
        
        var myAnimationSettings:Object = {
                xAxisTo:0,
                yAxisTo:180,
                animationDuration:1,
                easingMath:"Expo",
                easingType:"easeOut",
                delay:1,
                callBack:"doSomething",
                callBackScope:this,
                callBackArgs:[true, "both", 1]
        }
        my3Dplane.animate3DPlane(myAnimationSettings);
        
my3Dplane.getTarget(); // returns an instance of the newly created MovieClip containing the 3D plane.
        
my3Dplane.mouseReactive(true, 30, 20, true); @param1 = turns 3D movement based on mouse position on/off @param2 = the limit for the 3D movement on the x axis, (in degrees). @param3 = the limit for the 3D movement on the y axis, (in degrees). @param4 = determines whether the 3D plane rotates towards the mouse or away, (only used when limiting angles). ------------------------------------------------------------ ------------------------------------------------------------
        NOTES
------------------------------------------------------------ ------------------------------------------------------------

        BILL MACKIN
• When using a MovieClip for your content, be sure to position the top left of your content at 0,0.
        
        TO DO
1. Update so you can create several 3D plane instances and control each of them separately.
*/
/////////////////////////////////////////////////////////////// \\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


///////////////////////////////////////////////////////////////
// INCLUDE / IMPORT --->
// ------------------------------------------------------------
import flash.display.BitmapData;
import flash.geom.Matrix;
import mx.utils.Delegate;
import ActionScript.simple3D.DistortImage
import ActionScript.simple3D.World3d
import ActionScript.Tools.PennerEasing
//////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////




class ActionScript.simple3D.Simple3DPlane {
        
// PROPERTIES // ------------------------------------------------------------
        var myName:String;                                                      
                // A name for the newly created 3D plane.
var libraryLink:String; // A link to an item in the library to be the content for the 3D plane. var scope:MovieClip; // The scope of the newly created 3D plane. var xAxisStart:Number = 0; // The amount (in degrees) to rotate the 3D plane pivoting on the x axis. (0 to -180 = backwards) & (0 to 180 = forwards) var yAxisStart:Number = 0; // The amount (in degrees) to rotate the 3D plane pivoting on the y axis. (0 to -180 = right) (0 to 180 = left) var vQuality:Number = 3; // The vertical quality of the 3D plane. Higher numbers equal better quality but slower performance. var hQuality:Number = 3; // The horizontal quality of the 3D plane. Higher numbers equal better quality but slower performance.
        
var xAxisTo:Number; // The amount (in degrees) to rotate the 3D plane on the x axis. var yAxisTo:Number; // The amount (in degrees) to rotate the 3D plane on the y axis. var animationDuration:Number; // The duration (in seconds) of the animation. var easingMath:String; // Possible values = "Back", "Bounce", "Circ", "Cubic", "Elastic", "Expo", "Linear", "Quad", "Quart", "Quint", "Sine" var easingType:String; // Possible values = "easeIn", "easeOut", "easeInOut" var delay:Number; // Amount of delay (in seconds) before starting the animation. var callBack:String; // Function to call when the animation is finished.
        var callBackScope:MovieClip;                                            
//      Scope for callBack.
var callBackArgs:Array; // Array of arguments for callBack (maximum of 8).
        
// PRIVATE PROPERTIES // ------------------------------------------------------------
        private var _mc:MovieClip;
        private var _scope:MovieClip;
        private var _bd:BitmapData;
        private var _di:DistortImage;
        private var _planeModel:Object;
        private var _my3DWorld:World3d;
        private var _mcLibrary:MovieClip;
        private var _xa:Number = 0;
        private var _ya:Number = 0;
        private var _myMouseListener:Object = new Object();
        private var _noLimitAnimationInterval:Number;
        private var _planeAnimationInterval:Number
        private var _startTime:Number;

        
        
        function Simple3DPlane(creationSettings:Object) {
                
                // grab creation paramaters
                for (var prop in creationSettings) {
                        this[prop] = creationSettings[prop];
                }
                
                // WARNINGS
if (!myName) trace("REQUIRED VALUE MISSING! The current value for myName = "+myName); if (!libraryLink) trace("REQUIRED VALUE MISSING! The current value for libraryLink = "+libraryLink);
        
        
                // INITIALIZE
                _scope = (!scope) ? _level0 : scope;
                var _zVertDist:Number;
                var _zHorzDist:Number;
                
                // create BitmapData
                if (BitmapData.loadBitmap(libraryLink)) {
                        _bd = BitmapData.loadBitmap(libraryLink);
                } else {
_mcLibrary = _scope.attachMovie(libraryLink,"mcLibrary", _scope.getNextHighestDepth());
                        _mcLibrary._visible = false;
_bd = new BitmapData(_mcLibrary._width, _mcLibrary._height, true, 0x000000);
                        var _mcMatrix:Matrix = new Matrix();
                        _bd.draw(_mcLibrary, _mcMatrix, null, "normal", null, 
true);
                }

                // create mc to act as a container
                _scope.createEmptyMovieClip (myName, 
_scope.getNextHighestDepth());
                _mc = _scope[myName];
                
                // create a DistortImage instance for the new mc
                _di = new DistortImage(_mc, _bd, vQuality, hQuality);
                _zVertDist = _mc._height/2;
                _zHorzDist = _mc._width/2;
                
                // create 3D plane model
_planeModel = { points: [{x:-_zHorzDist, y:-_zVertDist, z:0}, {x:_zHorzDist, y:-_zVertDist, z:0}, {x:_zHorzDist, y:_zVertDist, z: 0}, {x:-_zHorzDist, y:_zVertDist, z:0}], height:_mc._height};
                
                // create 3D world renderer
                _my3DWorld = new World3d(_planeModel);
                
                // render the 3D plane position
                doRender(xAxisStart, yAxisStart);
        };
        

        function animate3DPlane(animationSettings:Object) {
                
var myThis:Simple3DPlane = this; //<--------------- IS THIS TROUBLE FOR CONTROLLING MULITPLE INSTANCES!!????
                
                // grab animation paramaters
                for (var prop in animationSettings) {
                        this[prop] = animationSettings[prop];
                }
                
                if (delay) {
                        var delayStart:Number = setInterval(start, delay*1000);
                }
                else {
                        _startTime = getTimer();
                        _planeAnimationInterval = setInterval(myThis, 
"doAnimation", 34);
                }
                
                function start() {
                        clearInterval(delayStart);
                        myThis._startTime = getTimer();
myThis._planeAnimationInterval = setInterval(myThis, "doAnimation", 34);
                }
        };
        
        
function mouseReactive(mrSwitch:Boolean, xAngleLimit:Number, yAngleLimit:Number, attract:Boolean) {
                
var myThis:Simple3DPlane = this; //<--------------- IS THIS TROUBLE FOR CONTROLLING MULITPLE INSTANCES!!?????
                //trace("_my3DWorld="+myThis._my3DWorld.mModel.height);
                if (mrSwitch) {
                        if (xAngleLimit || yAngleLimit) {
                                var neg:Number;
                                myThis._myMouseListener.onMouseMove = 
function() {
                                        neg = (attract) ? -1 : 1;
                                        _xa = 
neg*(myThis._mc._ymouse/(Stage.height/2)*xAngleLimit);
                                        _ya = 
neg*-(myThis._mc._xmouse/(Stage.width/2)*yAngleLimit);
                                        myThis.doRender(_xa, _ya);
                                };
                                Mouse.addListener(myThis._myMouseListener);
                        } else {
myThis._noLimitAnimationInterval = setInterval(myThis, "setNoLimit", 34);
                        }       
                } else {
                        clearInterval(myThis._noLimitAnimationInterval);
                        Mouse.removeListener(myThis._myMouseListener);
                }
        };

        
        function getTarget():MovieClip {
                return _mc
        };
        
        
// ------------------------------------------------------------ PRIVATE METHODS ------------------------------------------------------------
        private function doRender(xAxis:Number, yAxis:Number) {
                
                // render 3D points
                _my3DWorld.render(xAxis, yAxis);
                
                // set distortImage corners based on 3D plane positions
                var pts:Object = _my3DWorld.points;     
_di.setTransform(pts[0].sx, pts[0].sy, pts[1].sx, pts[1].sy, pts [2].sx, pts[2].sy, pts[3].sx, pts[3].sy);
        };
        

        private function doAnimation() {
                
                var myThis:Simple3DPlane = this;
                
                var currentTime:Number = getTimer() - _startTime;
                var easing:Function = PennerEasing[easingType+easingMath];
var xAnimationIncrement:Number = easing(currentTime, xAxisStart, (xAxisTo - xAxisStart), animationDuration*1000); var yAnimationIncrement:Number = easing(currentTime, yAxisStart, (yAxisTo - yAxisStart), animationDuration*1000);
                doRender(xAnimationIncrement, yAnimationIncrement);
                if (currentTime >= animationDuration*1000) {
                        doRender(xAxisTo, yAxisTo);
                        clearInterval(myThis._planeAnimationInterval);
                        doCallBack();
                }
        };
        
        
        private function setNoLimit() {
                _xa -= (_mc._ymouse*3) / 100;
                _ya += (_mc._xmouse*3  ) / 100;
                doRender(_xa, _ya);
        };
        
        
        private function doCallBack() {
callBackScope[callBack](callBackArgs[0], callBackArgs[1], callBackArgs[2], callBackArgs[3], callBackArgs[4], callBackArgs[5], callBackArgs[6], callBackArgs[7]);
        };
}



On May 23, 2007, at 2:05 PM, Bill Mackin wrote:

Hello,

I'm having a problem with one of my class files. I've created a class to control the animation of a 3D plane, but I am unable to use multiple instances at the same time. I'm not sure what it is that is conflicting. Any ideas would be appreciated.

I've attached the class file. If the other class files are needed, please let me know. I also have a test FLA that I have been using to test my progress on this problem.

Cheers,

- Bill
_______________________________________________
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com

_______________________________________________
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com

Reply via email to