2010-07-17 2 views
0

Je travaille sur un jeu dans OBJ C qui a une vue de balle et une vue de scène. La vue de la scène a 4 sous-vues. Toutes les vues sont UIImageViews. J'ai une méthode de détection de collision qui fonctionne. Je voudrais l'étendre à plus de 4 sous-vues sans créer simplement plus de lignes de code. En regardant le code ci-dessous, est-il un moyen de simplifier cela en boucles à la place. Merci!Détection de collision à l'aide de sous-vues multiples dans une vue en mouvement

// convert each square to be relevant to ball's superview in order to collision detect 
CGRect square_01Frame = [ball.superview convertRect:square_01.frame fromView:square_01.superview]; 
CGRect square_02Frame = [ball.superview convertRect:square_02.frame fromView:square_02.superview]; 
CGRect square_03Frame = [ball.superview convertRect:square_03.frame fromView:square_03.superview]; 
CGRect square_04Frame = [ball.superview convertRect:square_04.frame fromView:square_04.superview]; 

// convert CGRects to NSStrings for storage in square_frames array 
NSString *square_01FrameString = NSStringFromCGRect(square_01Frame); 
NSString *square_02FrameString = NSStringFromCGRect(square_02Frame); 
NSString *square_03FrameString = NSStringFromCGRect(square_03Frame); 
NSString *square_04FrameString = NSStringFromCGRect(square_04Frame);  

// load array of NSStrings 
[square_frames replaceObjectAtIndex:0 withObject:square_01FrameString]; 
[square_frames replaceObjectAtIndex:1 withObject:square_02FrameString]; 
[square_frames replaceObjectAtIndex:2 withObject:square_03FrameString]; 
[square_frames replaceObjectAtIndex:3 withObject:square_04FrameString]; 

// create a for loop 
for (int i=0; i<4; i++) { // 4 squares 
    // create test frame 
    CGRect test_frame = CGRectFromString([square_frames objectAtIndex:i]); 
    if (CGRectIntersectsRect(test_frame,ball.frame)) { // collision detection 
     // do something 
    } 
} 

Répondre

1

Eh bien, je ferais un certain nombre de choses. D'abord, je créerais une boule "modèle", juste une sous-classe NSObject pour représenter la boule. Probablement, cela aurait une propriété "location" ou quelque chose, qui est le CGRect. Ensuite, votre vue actuelle pourrait avoir une série d'objets sphériques à l'écran, et juste faire une boucle à travers eux. Dans l'ensemble, cependant, je ne pense pas que l'utilisation des rects de UIView est la meilleure façon de gérer la détection de collision. Je pense que vous feriez mieux de définir cela d'une autre manière, puis de simplement mettre à jour l'interface en conséquence.

Généralement, ce n'est pas une bonne idée de compter sur votre implémentation d'interface utilisateur pour la conception de jeux. Il est difficile de changer (comme vous le notez dans votre question).

+0

Les carrés sont dans une vue d'image maître, donc je peux déplacer cette vue autour de laquelle toutes les vues qu'elle contient sont déplacées. En fait, j'ai commencé comme vous l'aviez suggéré, mais j'ai pensé que cela pourrait être plus lent à traiter. Il y avait moins de code pour la détection, bien qu'à l'époque je n'avais pas implémenté de boucles, donc le code semblait plus long. Finalement, je voudrais passer à GL, mais uiimageviews fonctionne bien pour ce projet. Merci pour le conseil! – Damonmath

+0

De rien. Si vous utilisez Open GL, je recommande une bibliothèque telle que Cocos2D ou, si 3D, SIO2. – makdad

Questions connexes