This is how I am instantiating the creationObject (below). I believe that if I am passing a different name to the myName property it should create more than one MovieClip instance.

I'd love to hear more about your suggestion to use a custom class to set properties instead of a generic object, or maybe point me in the direction of good tutorial or example. Unfortunately I am a self taught coder and am not always familiar with some of the best practices.

var myCreationSettings:Object = {
        myName:"3DCircleOnCavill",
        libraryLink:"CircleOnCavill",
        scope:this,
        xAxisStart:-20,
        yAxisStart:20,
        vQuality:3,
        hQuality:3
}
var my3Dplane:Simple3DPlane = new Simple3DPlane(myCreationSettings);
my3Dplane.mouseReactive(true, 30, 20, true);

var myCreationSettings2:Object = {
        myName:"3DCircleOnCavill2",
        libraryLink:"tom",
        scope:this,
        xAxisStart:-20,
        yAxisStart:20,
        vQuality:3,
        hQuality:3
}
var my3Dplane2:Simple3DPlane = new Simple3DPlane(myCreationSettings2);
my3Dplane2.mouseReactive(true, 30, 20, true);

On May 23, 2007, at 3:20 PM, David Ngo wrote:

Looks like you're attaching your plane to the same MovieClip instance, thus destroying any/all objects that was previously on that MovieClip instance. Depends on how you're instantiating your creationObject. BTW, just a comment on your implementation: I would use a custom class to set properties for creation and animation rather than a generic object. This way, you can avoid having to iterate through the object and then you can just composition your custom class/object. In Java, this would be equivalent to a Value Object or
a Data Transfer Object.



-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Bill Mackin
Sent: Wednesday, May 23, 2007 12:51 AM
To: flashcoders@chattyfig.figleaf.com
Subject: Re: [Flashcoders] problem creating multiple instances

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

_______________________________________________
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