Betoptic 5ml Eye Drops Bottle $33.00

ActionScript 3.0 Flash

Betoptic 5ml eye drops bottle $33.00 This topic came up when someone asked me how (if it was possible) to instruct one movie clip to start playing after another has stopped.  For example, betoptic 5ml eye drops bottle $33.00 the main timeline does its thing, betoptic 5ml eye drops bottle $33.00 humming along, betoptic 5ml eye drops bottle $33.00 when it suddenly comes to a keyframe that contains a nested movie clip.  A simple stop() action in that keyframe tells the main timeline to rest where it is, betoptic 5ml eye drops bottle $33.00 and the nested movie clip starts playing on its own.  When the nested clip hits the last frame of its own timeline … that’s when the main timeline needs to start moving again.  How to do that?

Betoptic 5ml eye drops bottle $33.00 In my reply, betoptic 5ml eye drops bottle $33.00 I said there were a number of possible ways.  You could set up a loop, betoptic 5ml eye drops bottle $33.00 for example — MovieClip.onEnterFrame (AS2) or Event.ENTER_FRAME (AS3), betoptic 5ml eye drops bottle $33.00 maybe setInterval() (AS2) or the Timer class (AS3) — and in that loop, betoptic 5ml eye drops bottle $33.00 check the current frame of the nested movie clip against the number of its total frames.  In AS2, betoptic 5ml eye drops bottle $33.00 that would be a comparison of _currentframe to _totalframes; in AS3, betoptic 5ml eye drops bottle $33.00 currentFrame to totalFrames.  When the former equals the latter, betoptic 5ml eye drops bottle $33.00 invoke MovieClip.play() on the main timeline and quit the loop.

Betoptic 5ml eye drops bottle $33.00 But much easier than that, betoptic 5ml eye drops bottle $33.00 and less processor intensive, betoptic 5ml eye drops bottle $33.00 is simply to put a keyframe script in the last frame of the nested movie clip, betoptic 5ml eye drops bottle $33.00 telling its parent (the main timeline) to play.  In AS2, betoptic 5ml eye drops bottle $33.00 that would be this._parent.play();.  In AS3, betoptic 5ml eye drops bottle $33.00 this.parent.play(); (no underscore on parent).  Ah, betoptic 5ml eye drops bottle $33.00 but there lies a problem.  The AS3 version, betoptic 5ml eye drops bottle $33.00 which is technically correct, betoptic 5ml eye drops bottle $33.00 causes a compiler warning:  1061: Call to a possibly undefined method play through a reference with static type flash.display:DisplayObjectContainer.  What on earth? 

What’s going on?

Betoptic 5ml eye drops bottle $33.00 Thankfully, betoptic 5ml eye drops bottle $33.00 that error message gives a very useful clue.  Forget the cryptic 1061, betoptic 5ml eye drops bottle $33.00 forget “static type” blah blah.  The useful parts are “undefined method play” and “DisplayObjectContainer.”  Essentially, betoptic 5ml eye drops bottle $33.00 this is saying, betoptic 5ml eye drops bottle $33.00 “Hey, betoptic 5ml eye drops bottle $33.00 you’re pointing me to an instance of the DisplayObjectContainer class and asking me to invoke a play() method on it.  There is no play() method in this class, betoptic 5ml eye drops bottle $33.00 bub, betoptic 5ml eye drops bottle $33.00 so what am I supposed to do?”

Betoptic 5ml eye drops bottle $33.00 If you look up the DisplayObjectContainer class in the ActionScript 3.0 Language and Components Reference, betoptic 5ml eye drops bottle $33.00 you’ll find that indeed, betoptic 5ml eye drops bottle $33.00 the class doesn’t support the method play().  That’s a MovieClip method.  But wait … shouldn’t the expression this.parent — as stated by a movie clip in the main timeline — point to a valid MovieClip reference?  To be fair, betoptic 5ml eye drops bottle $33.00 DisplayObjectContainer is indeed an ancestor in MovieClip’s family tree.  MovieClip extends Sprite, betoptic 5ml eye drops bottle $33.00 which extends DisplayObjectContainer, betoptic 5ml eye drops bottle $33.00 but the main timeline certainly is a movie clip.  In fact, betoptic 5ml eye drops bottle $33.00 you can prove it.

Betoptic 5ml eye drops bottle $33.00 Create a new ActionScript 3.0 FLA, betoptic 5ml eye drops bottle $33.00 draw a quick shape and convert it to a movie clip symbol.  Enter its timeline and, betoptic 5ml eye drops bottle $33.00 in frame 1, betoptic 5ml eye drops bottle $33.00 type trace(this.parent is MovieClip); (is replaces instanceof in AS3).  Test your movie and keep an eye on the Output panel.  Sure enough, betoptic 5ml eye drops bottle $33.00 Output panel says true.

Betoptic 5ml eye drops bottle $33.00 So what gives?  If the expression this.parent points to a valid MovieClip instance, betoptic 5ml eye drops bottle $33.00 why isn’t Flash smart enough to allow for the invocation of a MovieClip method, betoptic 5ml eye drops bottle $33.00 such as play(), betoptic 5ml eye drops bottle $33.00 on that instance?  Honestly, betoptic 5ml eye drops bottle $33.00 that’s a good question.  It’s so good, betoptic 5ml eye drops bottle $33.00 I can’t answer it.  But I do know how to get around it.  ;)

The “unsafe” workaround

Betoptic 5ml eye drops bottle $33.00 That overly cautious error message is the result of Flash CS3’s default strict mode for the compiler.  I don’t recommend the following change, betoptic 5ml eye drops bottle $33.00 but if you simply want to turn off the warning (along with a bunch of other useful warnings, betoptic 5ml eye drops bottle $33.00 all in one shot), betoptic 5ml eye drops bottle $33.00 head over to File > Publish Settings > Flash tab, betoptic 5ml eye drops bottle $33.00 then click the Settings button.  Remove the checkmark from Strict Mode and you’re done.  Test your code and it’ll work just fine — because (in this context) this.parent really is a MovieClip reference.

Betoptic 5ml eye drops bottle $33.00 Again, betoptic 5ml eye drops bottle $33.00 experiment with that if you like, betoptic 5ml eye drops bottle $33.00 but I really don’t recommend it.  By turning off strict mode, betoptic 5ml eye drops bottle $33.00 you may be tempting yourself to write lazy code, betoptic 5ml eye drops bottle $33.00 and sooner or later, betoptic 5ml eye drops bottle $33.00 especially in AS3, betoptic 5ml eye drops bottle $33.00 that will bite you with a set of sharp teeth.  And it’ll happen on a day when your boss is breathing down your neck.

The better workaround

Betoptic 5ml eye drops bottle $33.00 I call this one “better” because, betoptic 5ml eye drops bottle $33.00 by using it, betoptic 5ml eye drops bottle $33.00 you end up demonstrating that you know how to be sensitive to the compiler, betoptic 5ml eye drops bottle $33.00 paranoid as it may occasionally be.  The better you know what the compiler needs, betoptic 5ml eye drops bottle $33.00 the likelier you’ll master the language.

Betoptic 5ml eye drops bottle $33.00 We already know, betoptic 5ml eye drops bottle $33.00 even if the compiler doesn’t seem to, betoptic 5ml eye drops bottle $33.00 that the expression this.parent — in this context! — does refer to a MovieClip instance.  We’re simply going to tell the compiler that.  By casting that expression as a MovieClip, betoptic 5ml eye drops bottle $33.00 you’re effectively saying, betoptic 5ml eye drops bottle $33.00 “Trust me on this one; this is a MovieClip.”  Casting is done like this:

MovieClip(this.parent).play();

Betoptic 5ml eye drops bottle $33.00 Note that only the object reference, betoptic 5ml eye drops bottle $33.00 this.parent, betoptic 5ml eye drops bottle $33.00 goes inside the parentheses.  The new combined expression, betoptic 5ml eye drops bottle $33.00 MovieClip(this.parent) gets .play() (with the leading dot) tacked on to the end, betoptic 5ml eye drops bottle $33.00 and even with strict mode on, betoptic 5ml eye drops bottle $33.00 that’ll do it.

Betoptic 5ml eye drops bottle $33.00 That goes for any MovieClip class member, betoptic 5ml eye drops bottle $33.00 by the way, betoptic 5ml eye drops bottle $33.00 not just play().  All the cast does is let the compiler know it’s truly dealing with a MovieClip, betoptic 5ml eye drops bottle $33.00 so any MovieClip feature is covered.

Average Rating: 4.6 out of 5 based on 180 user reviews.

Leave a Reply