just apply the reaction shown in this demo.
or build your own.
look for instance an old pingpong game
see how the bounce is done

then onRed(e:event)
        doTheBounce();

I'll be off this week to FOTB...
So I'm affraid I will not be able to help you more than I did already...

Fabrice

On Sep 18, 2009, at 11:20 PM, Victor Ribeiro wrote:


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