Search content:

 

Personal Menu
Username:
Password:
Save password

Become a member

Forgot Password?

 

Don't miss these
Border Xtra
Ceiling and floor math functions
ADO Xtra For MUS
SMARTSCRIPT
Get Font List without using xtras!
Create Icon
Farbflash.de
Amara Flash Menu and Flash Button Maker
All_In_One Button Hue Shift
SpriteMap
MediaMacros Xtras Mall
 

 

 

Behavior Navegacion y colision 3d - 3d Collision Navigation

Added on 9/13/2004

 

Compatibilities:
D8_5 D9

This item has not yet been rated

Author: Fernando Miro (website)

Con la referencia de Paul Catanese desarrollé este control de navegacion y colisiones. Es bastante secillo, y cualquier duda pueden contactarme a la direccion de mail. ------------------------------------------ With the reference of Paul Catanese I developed to east control of navigation and collisions. Secillo is enough, and any doubt can contact me to the mail direction.

--------------------------------------------------------
-- CONTROL DE NAVEGACION Y COLISIONES --
-- Escrito por Fernando Miró - Julio 2004 --
-- Con la colaboración de Paul Catanese --
-- Libre de copyright --
--------------------------------------------------------



property p3dMember       -- referencia al 3D member
property pSprite         -- referencia al 3D sprite
property pCamera         -- referencia al sprite de camara
property pCameraSphere   -- referencia a la sphere usada en la camara (para la colision)
property pMouseDown      -- propiedad de boton izquierdo
property pRMouseDown     -- propiedad de boton derecho
property pEnter          -- propiedad de cursor enter



on beginSprite me
  
  -- inicia los "properties"
  p3dMember = sprite(me.spriteNum).member
  pSprite = sprite(me.spriteNum)
  pCamera = pSprite.camera
  
  
  
  -- crea la esfera de colision de camara
  camSphereRes = p3dMember.newModelResource("camSphereRes",#sphere)
  camSphereRes.radius = 20
  pCameraSphere = p3dMember.newModel("cameraSphere",camSphereRes)
  
  -- hace a la esfera un "child" de camara, usando #preserveParent
  -- para que se mueva con la camara (el parent)
  pCamera.addChild(pCameraSphere,#preserveParent)
  
  -- hace el registro del member para regular el evento "timeMS", responder
  -- a los datos de teclado y resuelve la colision de camara
  
  p3dMember.registerForEvent(#timeMS,#controlCamera,me,1000,10,0)
  
on controlCamera me    
  
  
  
  
  
  --------------------------------------------------------------------  
  -- CONTROL DE NAVEGACION --
  --------------------------------------------------------------------  
  
  
  
  
  -- si el cursor esta en la parte superior del modelo,
  --la camara mueve hacia adelante
  
  
  if the mousev > 141 then  
    pCamera.translate (0,0,2)
  end if
  
  -- si el cursor esta en la parte inferior del modelo,
  --la camara mueve hacia atras
  
  
  if the mousev < 257 then
    pCamera.translate (0,0,-2)  
  end if
  
  -- si el el cursor esta sobre la derecha del modelo,
  -- la camara gira hacia derecha
  
  if the mouseh > 145 then
    pCamera.rotate (0,-0.3,0)  
  end if
  
  
  -- si el el cursor esta sobre la izquierda del modelo,
  -- la camara gira hacia izquierda
  
  if the mouseh < 349 then
    pCamera.rotate (0,0.3,0)  
  end if
  
  
  
  
  
  -----------------------------------------------------------------------
  -- CONTROL DE COLISION DE CAMARA --
  -----------------------------------------------------------------------
  
  -- emite un RAY hacia la izquierda
  collisionList = p3dMember.modelsUnderRay(pCamera.worldPosition,
  -pCamera.transform.xAxis,#detailed)
  -- si hay modelos frente a la camara, chequea la colision
  if (collisionList.count) then
    me.checkForCollision(collisionList[1])
  end if
  
  -- emite un RAY hacia la derecha
  collisionList = p3dMember.modelsUnderRay(pCamera.worldPosition,
  pCamera.transform.xAxis,#detailed)
  
  -- si hay modelos frente a la camara, chequea la colision
  if (collisionList.count) then
    me.checkForCollision(collisionList[1])    
  end if
  
  -- emite un RAY hacia adelante
  collisionList = p3dMember.modelsUnderRay(pCamera.worldPosition,
  -pCamera.transform.zAxis,#detailed)
  
  -- si hay modelos frente a la camara, chequea la colision
  if (collisionList.count) then
    me.checkForCollision(collisionList[1])    
  end if  
  
  -- emite un RAY hacia atras
  collisionList = p3dMember.modelsUnderRay(pCamera.worldPosition,
  pCamera.transform.zAxis,#detailed)
  
  -- si hay modelos frente a la camara, chequea la colision
  if (collisionList.count) then
    me.checkForCollision(collisionList[1])    
  end if
  
end

on checkForCollision me, thisData
  
  -- evalua la distancia para el collisionList
  dist = thisData.distance
  
  -- comprueba si la distancia es menor que el radio de la esfera de camara
  if (dist < pCameraSphere.resource.radius) then
    
    -- calcula la distancia de penetracion
    diff = pCameraSphere.resource.radius - dist
    
    -- calcula el vector perpendicular a la superficie de lapared
    -- para mover la camara (usando la propiedad #isectNormal)
    tVector = thisData.isectNormal * diff    
    
    -- mueve la camara para resolver la colision
    pCamera.translate(tVector,#world)
    
  end if
  
end



 


Upload Provided by ABCUpload ASP

Contact

MMI
22 West Court Sq
Suite 2C
Newnan, GA 30263
USA

Fax - (206) 339-5833

Send e-mail