2010-12-03 2 views
1

J'essaie le moteur physique Corona pour un jeu simple. J'ai créé plusieurs "boules", juste un objet circulaire et "bien" un objet capteur statique.Corona physics engine Objet d'événement de collision

physics.addBody(ball,{density=1-dens, friction=0.2, bounce=boun, radius=imp}) 
physics.addBody(well,"static", { radius=sensorRadius, isSensor = true}) 

L'événement de collision a "auto" et les paramètres "événement". Existe-t-il un moyen simple de vérifier le rayon de la "balle" qui frappe le puits?

Répondre

2

Vous avez probablement soit compris cela déjà, ou renoncé à Corona maintenant, mais tellement il y a une réponse ici, je vais ajouter mes deux cents:

Vous pouvez ajouter toute propriété que vous voulez à votre objet de balle. Vous n'avez pas besoin de déclarer explicitement les propriétés - elles sont créées automatiquement lorsque vous leur attribuez une valeur. Par exemple, pour ajouter une propriété « rayon », faire juste une fois que vous avez créé votre objet « boule »:

ball.radius = 20 

Une fois que vous avez fait cela, vous supposant que vous avez attaché le gestionnaire d'événements de collision au balle elle-même, la balle est passée comme paramètre « auto », et vous pouvez obtenir le rayon avec self.radius:

local radius = self.radius 

Si vous avez attaché le gestionnaire d'événements à un autre objet, sera passé le ballon comme la propriété "other" du paramètre "event". Donc, en utilisant votre exemple d'un puits, si vous avez joint le gestionnaire d'événements au bien, alors vous obtiendrez le rayon de la balle avec:

local radius = event.other.radius 

Bien sûr, si vous avez d'autres objets (non-ball) qui peut frapper le puits aussi, et ces objets n'ont pas la propriété "rayon", alors vous devrez vous assurer que "event.other" est en fait un objet "boule" en premier. Si vous ne le faites pas, vous obtiendrez "nul" lorsque vous tenterez d'obtenir le rayon. En fait, vous pouvez utiliser ce comportement pour détecter que l'autre objet est en fait une boule:

local radius = event.other.radius 
if radius then 
    -- may be safe to assume event.other is a ball 
else 
    -- something else hit the well 
end 

Hope this helps. Je ne suis qu'un mois dans Corona moi-même, alors ...