2016-01-25 3 views
1

Je fais un jeu de réaction, où vous pouvez détruire des ennemis et gagner des points, mais si les nœuds ennemis croisent le nœud des joueurs, cela réduit les vies de un. C'est un jeu de réaction donc je veux donner quelques points de tolérance dans l'intersection. Donc, s'ils se croisent, je ne veux pas voir immédiatement une réduction.CGRectIntersectsRect tolère certains points avant la réaction

Voici mon code:

if (CGRectIntersectsRect(enemy.frame, player.frame)) { 
    lives--; 
} 

Mon but est un seuil de tolérance pour l'intersection. J'espère que quelqu'un peut m'aider. (code dans l'objectif c s'il vous plaît)

+0

Avez-vous essayé de réduire la taille de enemy.frame ou de player.frame à cette fin? Si vous les faites plus petit, le coup sera détecté "plus tard" – luk2302

+0

si vous utilisez SpriteKit, alors je recommande fortement d'utiliser le moteur physique intégré pour les collisions, à travers 'SKPhysicsBody'. Je suis également d'accord avec luk2302, il suffit de réduire la taille du corps de la physique. – Hamish

+0

Je ne travaillerai pas parce que j'aurais besoin d'un corps physique changeant pour mon jeu et c'est impossible. @ Luk2302 que voulez-vous dire par faire le cadre plus petit? veux-tu dire l'image? Mais ce ne serait pas ce que je cherche .. – ccdev

Répondre

0

À partir des commentaires sur la question, je devine que vous ne comprenez pas ce que signifie «encart». Si vous avez un rectangle avec l'origine (10,20), la largeur 100 et la hauteur 50, si vous insérez le rectangle de 10 sur l'axe des x et de 5 sur l'axe des y, le résultat est un rectangle avec l'origine (20,25), largeur 80 et hauteur 40.

Notez que le rectangle d'insertion est contenu dans le rectangle d'origine. @ Luk2302 suggestion est au lieu de tester si les rectangles de cadre de vos deux objets se croisent vous tester si deux petits rectangles se croisent. Vous pouvez générer ces rectangles plus petits en insérant les rectangles de cadre d'une certaine quantité.

Vous pouvez bien sûr calculer un rectangle encastré directement avec quelques lignes de code, mais il y a un appel d'API CGRectInset (et aussi NSInsetRect) qui le fera pour vous en une ligne.

HTH

+0

Ok maintenant je comprends ce que cela signifie, mais je ne sais toujours pas comment implémenter ce CGRectInset en même temps avec CGRectIntersectsRect pour détecter les chevauchements .. Désolé pour tout ce noobness .. – ccdev

+0

? ? Si vous avez une variable 'x', une fonction' sqroot', et une fonction 'sin', comment calculez-vous le' sin' du 'sqroot' de' x' et mettez le résultat dans 'ans'? (1) 'tmp = sqroot (x); ans = sin (tmp); 'ou plus directement (2)' ans = sin (sqroot (x)) '. Vous avez maintenant deux fonctions, deux rectangles, et vous voulez les combiner ... – CRD