Contents
Articles
Behaviors
Books
Director News
Director Web Sites
FAQ
Games
Mailing Lists
News Groups
Project Examples
Reviews
Software
Tools
Useful Web Sites
Utilities
Xtras

Don't miss these
Sprite Drag - Confine to stage
Text X-Changer Version 1.3
Custom Projector Icon
Get Easter Date
Rollover Ink Change
Useful list functions
Rotate Click-Alphamania
DMedia
cXtraSoundRec
Clear Embedded Font
 

 

 

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



 


Contact

MMI
36 South Court Sq
Suite 300
Newnan, GA 30263
USA

Send e-mail