I have been telling a story today about trying to catch when a movieclip's _visible property is set. First, I showed how we create classes that extend MovieClip. Next, I described the problems that I am having writing a set and get function for _visible. Third, I showed how MovieClipProxy could be used on a simple MovieClip to catch the setting of _visible. Now, I am going to finish the story and show how it can be done for a class like ubSquare.
The first step is to make a slight adjustment to MovieClipProxy. Its constructor is written to either take 3 parameters and create an empty MovieClip or 4 parameters and attach a movieclip from the library. I changed it so that if it is sent more, it will use the first parameter to create the movieclip.
In the first post's example, we created the ubSquare using:
this.mySquare_ubS = ubSquare.create(this, "mySquare_mc", {_x:50, _y:75, _side:10});
So if we change the constructor of MovieClipProxy to read:
function MovieClipProxy(a,b,c,d,e) { var mc, mc2; if (arguments.length == 3) { mc = __initEmpty(a,b,c); } else if (arguments.length == 4){ mc = __initAttached(a,b,c,d); } else { mc = a(b,c,d,e); } __applyPrototyped(mc); }
Then we can invoke it with:
var mcp:MovieClipProxy = new MovieClipProxy(ubSquare.create, container, instanceName, initObj, depth);
and the created MovieClip will now be a ubSquare.
But, ubSquare had a side property and a scale method that are not handled by MovieClipProxy. I can create a ubSquareProxy Class
import edu.clips.test.MovieClipProxy; import edu.clips.test.ubSquare; class edu.clips.test.ubSquareProxy extends MovieClipProxy { public static function create(container:MovieClip, instanceName:String, initObj:Object, depth:Number) { if (depth == undefined) depth = container.getNextHighestDepth(); var mcp:MovieClipProxy = new MovieClipProxy(ubSquare.create, container, instanceName, initObj, depth); //define all the ubSquare properties, methods and functions mcp["scale"] = function(newScale:Number){ trace("in ubSquareProxy.scale "+ mcp._mc); mcp._mc.scale(newScale); } mcp.addProperty("side", function(){trace("addProperty getter");return this._mc.side}, function(newSide){trace("addProperty setter");this._mc.side = newSide}); return mcp; } }
and create it using:
this.mySquare_ubS = ubSquareProxy.create(this, "mySquare_mc", {_x:50, _y:75, _side:10});
Now the questions that I am left with are these:
- Is it worth the time to apply this method to my ubPod class with 80 documented properties, 23 methods and 7 event handlers just to capture when the one MovieClip property, _visible, changes?
- Is there a way to use __proto__ or prototype or constructor to access the MovieClip's setter for _visible and just change that to broadcast an event?
- Should ubSquareProxy extend MovieClipProxy, MovieClip or nothing?
No comments:
Post a Comment