Blog

  • Chafic’s Ultrashock V2 Article Additions & Comments

    Chafic wrote this phat article (that he shoulda let me tech edit) on Ultrashock. He took a monumental task in writing it, so I congratulate him.

    I wanted to add a few things that the V2 framework doesn’t take into account as far as Flash goes.

    Authortime Components

    This is the bane of the mixed group of developers we have in the Flash community and on the help lists. Some of us use authortime components, others dynamic, and some both. I try to attach everything dynamically myself, but for those gigantor forms, or intricate layout times, it?s just quicker & easier to drag and drop. The difference is, if a component is an authortime component, it is initialized (methods, not properties) a frame afterwards. The exclusion to this rule is if you drop it on _root, but even then, if your SWF is then loaded into a movie clip, you have the same problem again.

    The way I typically solve this is just to implement an onLoad in my class. Thus:

    public function init(Void):Void
    {
            super.init();
            
            setSize(320, 240); // set a default width and height
    }
    
    public function onLoad(Void):Void
    {
            my_pb.addEventListener(?click?, this);
            my_pb.label = ?Sup?;
    }
    

    Same holds true for Central components. I think Flex handles this transparently. Now, technically, one could argue you should be using createChildren to attach everything? but to me, that is not realistic to do every time. It violates OOP purism, but I?ve got deadlines to meet, and I know some of you do, too.

    createClassObject/createObject prefix

    This is more of an opinion because I haven?t looked at the FLASM output, but I consider it a best practice to call removeMovieClip before ever creating anything (createEmptyMovieClip/attachMovie/createClassObject, etc.). It may just so happen that the bytecode is the same for creating a movie clip in the same depth as another one (even if the same movie clip), thus deleting whatever is there, but there is one distinct case I can argue: corrupted movie clips. Sometimes, when loadMovie fails on loading JPEGS (not sure about SWFs), it?ll corrupt the movie clip. This is mega lame if you authortime dropped it because now your foobarred? unless you swap it to a positive depth and then removeMovieClip on it which is hackish… but necessarey I guess in the case of deadPreivew (talk about this later). Thus, removing a movie clip before attaching it, to me, should have been added to the createObject method (since createClassObject calls it anyway). I haven?t, however, had this problem with text fields, so I don?t call removeTextField before creating them.

    Finally, and I don?t really know about a fix for this, sometimes onEnterFrame?s that are dynamically attached I believe hang around via the activation object. So, even if you delete the onEnterFrame before calling removeMovieClip, and even get a true returned value from the delete call, your onEnterFrame will still get called. I don?t really know how to fix that, even if it could, but it really just confirms you should be using doLater vs. rolling your own onEnterFrames, unless of course they are on process only movie clips (mc?s created specifically and only to generate that event for your use).

    Width & Height, deadPreview, and LivePreview

    You?ll notice above I called setSize in my init. I did this because, by default, __width and __height are based on _width and _height. Now, if your creating the ideal component, there really isn?t anything to base a valid _width and _height value off of, is there? Well maybe? depends on how you make things.

    Back in MX, width and height were getter/setters for width and height. That is, they were NOT pointers to _width and _height values, which to me, is a failure, again, for the V2 framework to make allowances (yes, they are allowances, that?s why frameworks rock) for Flash. For example, an image is 1000×1000, however, your masking it off at 320×240. Know what width reports? 1000. Stupid. Thus, that?s why MX rocked, because no matter what you did via setSize, it always correctly reported the ?true? or ?visual? width and height; if for some odd reason you needed the true _width, you can just access it. That?s why in MX it was integral to default to something because the base class, FUIComponent, did not.

    Typically, you?d put your components your using on frame 2, with a stop action on frame 1, thus having a nicely packaged component, reading for SWC exportation. However, this causes 2 problems. First, there is nothing on frame 1, therefore, width and height won?t be jack (well? 0, 0) because there is no physical element on frame 1 for it to get bearings on what _width and _height will be. Second, because there is nothing on frame 1 (aside from a stop action), your LivePreview for your component won?t work. LivePreview?s, since MX, have needed SOMETHING on their stage (separate SWF in MX, frame 1 in 2004) so they can have a rect in which to draw in. Thus, in MX, deadPreview was born. If you turned off LivePreview in MX, you?d see this sketchy, or non-live component. Typically this was just the pieces of the component put together in a semblance of what the component would look like? or what you saw when you did an edit in place on components. This was done for those who turned LivePreview off in the IDE. Additionally, an automatic unloadMovie was called on deadPreview (you typically named your movie clip that) so it was removed when your component was run. However the V2 framework has removed this? as mistake in my eyes.

    Because of deadPreview’s new role in as the frame 1 rect creator for SWC LivePreviews, it now has 2 roles (first here, 2nd below this paragraph). I?ll typically still use deadPreview, and call swapDepths(0), and then removeMovieClip (since removeMovieClip doesn?t work on negative depth movie clips a.k.a. authortime movie clips). I have my own base class which uses Grant Skinner?s GDispatcher, and extends UIComponent, so I put the deadPreview stuff in there since everyone uses it. Still, I shouldn?t have to, but that?s a case where inheritance rox da hizz-ouse!

    Finally, a deadPreview gives your component a _width and _height that UIObject can work with, thus negating the need to give it a default width and height by calling setSize in your init. I still do so anyway, though.

    Conclusion

    I love Chafic?s article as I learned a lot (and now all of my classes need to be rewritten) and I love the V2 framework as well. It?s a lot easier to make my modifications without it breaking via another Flash IDE update, or some other addition since it?s nicely encapsulated. I?m a guy that likes to use frameworks, not create them, so it saves me a ton of time. Hopefully the above will help you navigate the Flash nuances that the V2 doesn?t solve.

  • $2.00+

    No, I’m not talking about Fraunch Bread, Fraunch Dressing… Maybe it happened yesterday and I just didn’t see it. I was already ticked that it cost me $19.00 fuggin dollars for 10.5 gallons of gas on Monday.

    Today, I saw for the first time in my life, gas prices at or above $2.00 dollars. In short, this blowz. I hear it’s supposed to be $3.00 by the end of the year…

  • Multiple Vibes: Vibration Studies?

    Intro

    The way in which devices interact all are bound by the 5 senses we humans have to interact with our world. Screens display things visually for our eyes, speakers emit audio alerts as do phones for our ears, and keyboards and force feedback joysticks for our sense of touch. Our sense of smell and taste, somewhat intertwined, are not utilized much.

    I think in the main 3, we’ve gotten pretty good and knowing how to best utilize the senses via our various technological devices. The screen shows text so we can clearly see it, we can adjust the brightness to compensate for lighting levels, and image compression technologies take advantage of the fact that there are thousands (millions?) of colors we cannot see, therefore, they are removed from the image to save in file size.

    Audio

    Audio is the same way; speakers have volume controls, sub-woofers not only help enhance realism, but also have evolved to help the deaf. I even saw a Flash site once that with audio told you where to click to navigate… the whole site was just a blank, black Flash movie. Certain sounds have become a part of our lifestyle, and from them, we know what they are, what they mean, all by their distinct sounds. Some forms of pitch and intonation are used to evoke emotions and or illicit a response. Just like a crescendo in a song builds, so to can a simple, 2 syllable sound song invoke a feeling that the computer is asking a question, or has completed a task.

    Touch

    Touch is getting there. I think there are a lot of neat boundaries we are pushing. The whole virtual games are getting cooler and cooler. From the adult world, those “sensation suits” will hopefully be adopted to the gaming world, so like force feedback joysticks, when you get hit in game, you’ll “feel the punch”, or “experience the rush of the explosion”… things like that.

    The whole point of this post

    I feel a vibration at my hip. I grab my Cingular Text Pager. No new message. It’s my phone instead telling me I have a voicemail. They are in the same vicinity, and thus, it is very easy for me to get confused on which one it is vibrating.

    Couple that with the proximity to my actual skin; loose pockets, or a thicket leather jacket I wear in winter, it makes it difficult for me to actually “feel” the phone ringing; to feel someone is calling me.

    Given some of the studies done on touch I learned about in college, some people’s sensitivity to touch is based on their experiences with it growing up. This was psychology, so they were mostly talking about Freud’s theories, and how much people were comfortable with touch. If you didn’t experience a lot of affection as a child, then later in life, you were more likely to feel uncomfortable with people touching you vs. if you had a lot of affection. This is cultural, too, because some families are just not affectionate, while others are. Some touches have associations built that are positive, whilst others negative. It’s pretty complex, but to me, you can easily find the sources/causes.

    Therefore, I’m not really sure you could quantify a stereotype/generality about what vibrations imply what. Therefore, I just look to music. For instance, something fast and quick implies urgency. Something constant, and then building up intensity implies someone/something wants your attention. I guess I’m not sure, if I were an engineer, how would I differentiate the vibrations between devices as well as ensure the experience is correct… enough so to be marketable and/or have a real business use. For example, ring tones do make money, thus, there is a reason to invest time in their effect on users.

    Conclusion

    …all I know is, via vibration, I’d like to know which device is telling me it has a message; my phone or my text pager. Vibrations are quiet, but get my attention more than anything since they are so personal.

  • Layout p@wn3d

    We have this Human Factors guy working here. Name’s Shayne. He did this wireframe for some of the Pod’s I’m building. So, we get together to discuss my current work and to ensure I’m hitting his vision on how things are designed. He’s not technically doing design here, but he pretty much gave my team the Illustrator design to use, both for layout and look and feel as well as the wireframes beforehand.

    We started dicussing the layout of the pods, with their use of the design elements and text. Within an hour, I had been schooled on layout, use of fonts, and textual elements. I had pretty much gotten a college layout class, in less than 30 minutes, for free.

    Bad news is all of my component’s size functions are now pretty much needing to be rewritten. The good news, however, is I now know how to do them 90% right. He says I won’t get all of my margin/positioning rules right the first time, nor have I got all of this figured out yet. I have 2 pages of his notes with which to use as reference; some on the back of wireframes, the other on a graph paper I ganked from my manager. Good stuff. Makes layout using coding harder, but in the long run, a lot better…looking.