subobjective21 interactive
Published July 03rd, 2008 by Nate Frank in Category: 3d

The folks over at blitz and at papervision2 have come up with some interesting ways to actually have real interaction with the MovieClips you are texturing your models with.

The quick is that you always use MovieMaterials(created with a reference to an existing movieclip someplace on stage). Normally the MovieMaterial object can be offstage or even visible=false to not see the clip; thing is they use visible=true, alpha=0 and reposition the clip actually under the mouse. A bit of trickery has the user actually interacting with the 2d flat MovieMaterial.

One of the nice things about this is that you can also do some testing and creating of functionality of your MovieClips as flat 2d objects and then map them to another object.

In creating an app with multiple panels in a 3D space every panel needs to be attached to the stage and then used to map onto your objects. This is fine when its just one object. When there are multiple surfaces that need interactivity this can quickly get out of control.

If you are using puremvc or caringorn to build your app you are used to creating a view/ui class that represents the specific element as a whole, it needs to have two elements, the stage texture version and the display3d object.

Ok cool. Just take a step back so that your view consists of two ui elements. Your mediators/viewhelpers can then access both elements and update them appropriately.

Wait what if we have multiple panels with the same textures? Looks like there are two options.

  1. Use the same texture/ the same reference to the movieclip on stage and use the target of the object to figure out what object you are on(requires dynamic naming of the display objects you are using so they can be keyed in later to access the specific class). You can take advantage of the InteractiveEvent3D event which includes the DisplayObject3D element that is interacted with.
  2. Use a separate instance of each texture on the stage so that it can be targeted separately for each individual item. This also needs to be dynamically named so that they do not overwrite any other textures. Destroy methods then need to make sure they clean up these 2d objects in addition to the 3d counterparts.

I also found that its a good idea to add some code that listens for the mouse to be off the given object and send the stage texture off stage and hidden. The example from blitz I found I could still click on an element even though my mouse wasn’t on the object.

Thanks to those guys for the hook ups of the advanced interactive elements.