2010-02-14 27 views
2

c'est GameViewController.mQuestion CGPathContainsPoint?

-(void)fillMutablePath{ 



    CGPoint movePoint = CGPointFromString([pointsToFillArray objectAtIndex:0]); 

    CGPathMoveToPoint(fillPath, NULL, movePoint.x, movePoint.y); 
    for (int i=0; i<[pointsToFillArray count]; i++) { 
     CGPoint tempPoint = CGPointFromString([pointsToFillArray objectAtIndex:i]); 
     CGPathAddLineToPoint(fillPath, NULL, tempPoint.x, tempPoint.y); 
     CGContextAddPath(gameViewObj._myContext, fillPath); 
     CGContextFillPath(gameViewObj._myContext); 

     if(CGPathContainsPoint(fillPath, nil, "What goes here?", false)){ 
      [self doDie]; 
     } 
else { 
    CGContextFillPath(gameViewObj._myContext); 
} 
     CGPathRelease(fillPath); 
     [pointsToFillArray removeAllObjects]; 
    } 


} 

Ceci est en GameView.m

-(CGPoint) GetBirdPosition:(CGPoint) PtPoint :(int) BirdNumber{ 
    CGPoint Temp=PtPoint; 
    BOOL isTouch=TRUE; 
    while (isTouch) 
    { 
     isTouch=FALSE; 
     if(playField[(int) Temp.x][(int) Temp.y]==2) 
     { 
      isTouch=TRUE; 
      if(playField[(int) Temp.x+1][(int) Temp.y] == 2 || playField[(int) Temp.x-1][(int) Temp.y] == 2) 
      { 
       pos[BirdNumber].y = -pos[BirdNumber].y; 
       Temp.y+=pos[BirdNumber].y; 

      } 
      else if(playField[(int) Temp.x][(int) Temp.y+1] == 2 || playField[(int) Temp.x][(int) Temp.y-1] == 2) 
      { 
       pos[BirdNumber].x = -pos[BirdNumber].x; 
       Temp.x+=pos[BirdNumber].x; 
      } 

     } 
    } 
    return Temp; 
} 

-(void)flyingBird:(NSTimer *)timer { 

    if(appDelegate.gameStateRunning == YES){ 

     for (int i=0; i< [birdImageViewArray count];i++) 
     { 
      UIImageView* birdImageView=[birdImageViewArray objectAtIndex:i]; 

      CGPoint Temp=CGPointMake(birdImageView.center.x + pos[i].x , birdImageView.center.y + pos[i].y); 
      birdImageView.center =[self GetBirdPosition:Temp:i]; 

      if(playField[(int) birdImageView.center.x][(int) birdImageView.center.y]==3){ 

       [[NSNotificationCenter defaultCenter] postNotificationName:@"LineCrossed" object:nil]; 
       [[NSNotificationCenter defaultCenter] postNotificationName:@"PlayDieSound" object:nil]; 
      } 
     } 
    } 
} 

Je ne peux pas comprendre ce qui se passe à l'endroit où je l'ai écrit « ce qui se passe ici » ?? Je le veux pour que si un oiseau est piégé dans la forme, alors [doDie] a lieu. Si l'oiseau n'est pas piégé dans la forme, il est rempli. Toutes les idées sont grandement appréciées.

Répondre

1

Je ne comprends pas vraiment votre code, mais j'imagine que c'est essentiellement ce que vous voulez faire:

CGPoint Temp=CGPointMake(birdImageView.center.x + pos[birdNum].x , birdImageView.center.y + pos[birdNum].y); 
if(CGPathContainsPoint(fillPath, nil, [myGameView GetBirdPosition:Temp:i], false)){ 
    [self doDie]; 
} 

Il semble que votre chemin est d'abord juste une ligne, et je ne pense pas que quoi que ce soit sera contenu dedans. Si vous expliquez plus en détail l'objectif (combien d'oiseaux vérifions-nous?) Est-ce le même chemin pour chacun?) Nous pouvons vous aider plus loin.

Edit:

Hmmmm, OK. La première chose est assez simple. Pour éviter le remplissage si un oiseau est dans le chemin, n'utilisez pas un autre cas. Dans le if, définissez un drapeau si l'oiseau actuel est contenu dans le chemin. Ensuite, après la boucle, si le drapeau n'est pas défini, remplissez le chemin. Donc, quelque chose comme:

BOOL pathContainsBird = NO; 
for (int i=0; i<[pointsToFillArray count]; i++) { 
    //bunch of stuff 
    if(CGPathContainsPoint(fillPath, nil, "What goes here?", false)){ 
     pathContainsBird = YES; 
     [self doDie]; 
    } 
} 
if(!pathContainsBird) { 
    //fill path here 
} 

Deuxièmement, je suis sûr que vous n'êtes pas en train de boucler la bonne chose. Il semble que vous développez le chemin à chaque itération, mais je pense que vous devriez d'abord construire tout le chemin, puis passer en revue tous les oiseaux, mais je pourrais être mal compris.

+0

Il pourrait y avoir entre 2-26 oiseaux qui volent autour selon le niveau. Si l'un d'eux est contenu dans la forme qui est formée, je veux que [doDie] se produise. Ça me rend fou. Je peux obtenir le contraire de ce que je veux arriver. Je ne peux pas comprendre comment je l'ai fait pour que la zone ne soit pas remplie de couleur si un oiseau est contenu dans la forme. Je vais essayer votre suggestion et voir ce que je viens avec. – NextRev

+0

quel est ce chemin de remplissage? Partout en google sur la même question, je le vois comme il est. Pas d'explication. –