Thanks a lot on the explanation.

So, there is a easy way to keep my camera from walk through walls?

You see, I'm trying to achieve something simple. Just import a
scenario inside flash, put a camera inside it and keep the camera from
crossing walls.

I'm basing my project on the "Advanced_FrustumHotelRoom" but is
getting too complicated.

Or I'm too dummy. Choose one. =/

Help me out.



On Sep 18, 5:15 am, Fabrice3D <[email protected]> wrote:
> Hi Victor,
> Sorry for the late reaction, kinda busy lately...
>
> first an intro on the class:
> the CollisionMap is a class that fires events based on colors, it  
> DOESN"T generate reactions commands
>
> if you want something that bounce, trigger a sound: you have to define  
> custom action yourself.
> like
> function hitBlue(e:Event)
>         bounce();
>
> The class should be able to trigger 65000 different color events.  
> never tested :))
>
> the key for a successfull handling: the map and world coordinates must  
> be sync.
> thats why the class needs a factor x and y
>
> here a little example
>
> var collisionbmd:BitmapData  --> a regular bitmapdata, holding the  
> colors
> var factorx:Number;
> var factory:Number;
>
> you have a room, say a cube, you have an avatar, you want place some  
> furniture in the room, and the avatar must not be able to go across  
> them.
> for the ease, lets place just one, a cube, right in the middle of your  
> room (the big cube)
>
> make your map, collisionbmd, for instance 1000x1000
> now you draw a rectangle shape in it, representing your little cube.  
> the rect of this shape is say x,250,y,250,width,500, height: 500
> you choose the clor red, FF0000 for thsi shape. You know now that if a  
> check done on this color  is positive that it will be the hit on the  
> cube.
> pseudo code: if pix testes == red, then avatar is on red, its the cube  
> in the middle --> do something
>
> now, you have made your cubes.
> the main cube is 2000 x2000x2000 and the small one is 1000x1000x1000  
> in your 3d scene
>
> so considering the scene3d units and the pixels of the map, thats  
> exactly twice the size of your map.
>
> so you pass now:
> factorx = factory = 2;
>
> here the declaration
> ( import + collisionmap class var on top class)
>
> collisionmap = new CollisionMap(collisionbmd, factorx , factory);
> collisionmap.setColorEvent(0xFF0000, "red", onRed);
> //declare if required more events if you want to trigger other stuffs
> collisionmap.setColorEvent(0xFFFF00, "yellow", onYellow);
>
> private function onRed(event:Event):void
> {
>         trace("hey you hit the little cube in middle of the room");
>
> }
>
> private function onYellow(event:Event):void
> {
>         trace("hey you hit the yellow part");
>
> }
>
> k, so now our little system is declared and using same scale
> time to add the checks:
>
> in youre enterframe, or whenever you want to check the collisions for  
> your avatar just add the following code:
>
> collisionmap.read(myAvatar.x, -myAvatar.z);  --> note here the -z check.
> this can be necessary depending on ways you display items, for  
> instance if your room model comes from a right handed system
>
> Thats all!
> on read, if the color is found at myAvatar.x, -myAvatar.z, in scale  
> factorx and y == red, the red event is fired automatically!
>
> Dev tip:
> if you want test the easy way, to see if code and map are sync, or  
> check wanna check if your furnitures are at the right place
> use your map as bitmapmaterial and set it to the cube bottom (the  
> floor of your room) to see if correct.
> also you can do easy checks such as:
> bmd.setPixels(myAvatar.x*factorx, -myAvatar.z*factory, somecolor);
>
> Know issues:
> If you compress your swf and use Flash IDE lib, the colors might be  
> affected
> so say you know for instance that a pixel is yellow at 100x100 on your  
> map
> you want to check if at runtime, after the swf is compiled using  
> compression if the color as been altered,
> trace(collisionmap.getColorAt(100, 100));
> if the returned uint is not the yellow, the event onYellow will not be  
> triggered, change then the listener declaration with the color value  
> you just have traced
> next compile, the event will be fired.
>
> again, this class works as a trigger, not a reaction handler!
> if you want see an example of reaction, look for instance at the room  
> demo into the trunk.
>
> I hope it will help you
>
> Fabrice
>
> On Sep 18, 2009, at 8:13 AM, Victor Ribeiro wrote:
>
>
>
> > Ok guy, here is the deal.
>
> > I can't find any decent documentation about on how the collisionMap
> > works, and I want it to work so bad...
>
> > Here is some facts about my project:
>
> > my floor is 5 x 5 meters.
>
> > my texture's floor is 512 x 512 pixels.
>
> > When I import the floor into the flash and don't have to rotate or
> > scale it anymore. everything is all right so far.
>
> > which parameters would you guys recommend me to use on my collisionMap
> > creation?
>
> > How does factorX and factorY works?
>
> > Please, if anyone can help me it'll be real nice.
>
> > =)

Reply via email to