2009-12-19 15 views
1

Je fais une application de jeu simple où vous appuyez sur un bouton gauche/droite, et UIImageView se déplace et anime. Voici le problème - Je veux que le UIImageView cesse de bouger lorsqu'il touche Essayer d'obtenir un UIImageView pour arrêter de bouger quand il atteint les limites de l'écran ... aide!


self.view.bounds.size.width 

Comment faire?

Voici le code existant:


    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
UITouch *touch = [[event allTouches] anyObject]; 
if([touch view] == rightbutton){ 
NSLog(@"touch rightbutton"); 
player.animationImages = [NSArray arrayWithObjects: 
     [UIImage imageNamed:@"linkr1.png"], 
     [UIImage imageNamed:@"linkr2.png"], 
     [UIImage imageNamed:@"linkr3.png"], 
     [UIImage imageNamed:@"linkr4.png"], 
     [UIImage imageNamed:@"linkr5.png"], 
     [UIImage imageNamed:@"linkr6.png"], 
     [UIImage imageNamed:@"linkr7.png"], 
     [UIImage imageNamed:@"linkr8.png"], 
     nil]; 
player.animationRepeatCount = 0; 
[self.view addSubview:player]; 
[player startAnimating]; 
rightbuttontimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(rightrepeater) userInfo:nil repeats:YES]; 
} 
if([touch view] == leftbutton){ 
NSLog(@"touch leftbutton"); 
player.animationImages = [NSArray arrayWithObjects: 
     [UIImage imageNamed:@"linkr1l.png"], 
     [UIImage imageNamed:@"linkr2l.png"], 
     [UIImage imageNamed:@"linkr3l.png"], 
     [UIImage imageNamed:@"linkr4l.png"], 
     [UIImage imageNamed:@"linkr5l.png"], 
     [UIImage imageNamed:@"linkr6l.png"], 
     [UIImage imageNamed:@"linkr7l.png"], 
     [UIImage imageNamed:@"linkr8l.png"], 
     nil]; 
player.animationRepeatCount = 0; 
[self.view addSubview:player]; 
[player startAnimating]; 
leftbuttontimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(leftrepeater) userInfo:nil repeats:YES]; 
} 
} 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
UITouch *touch = [[event allTouches] anyObject]; 
if([touch view] == rightbutton){ 
    NSLog(@"let go of rightbutton"); 
    [rightbuttontimer invalidate]; 
    [player stopAnimating]; 
} 
    if([touch view] == leftbutton){ 
    NSLog(@"let go of leftbutton"); 
    [leftbuttontimer invalidate]; 
    [player stopAnimating]; 
} 
} 

- (void)rightrepeater { 

CGPoint center = (CGPoint)[player center]; 
center.x += 10; 
[player setCenter:center]; 

} 

- (void)leftrepeater { 

CGPoint center = (CGPoint)[player center]; 
center.x += -10; 
[player setCenter:center]; 

} 

Toute aide sera appréciée. Merci!

Répondre

1

Dans votre méthode rightRepeater:

- (void)rightrepeater { 
    CGPoint center = (CGPoint)[player center]; 
    center.x += 10; 
    CGFloat rightEdge = center.x + [player width]/2; 
    if (rightEdge > view.bounds.size.width) { 
     center.x -= (rightEdge - view.bounds.size.width); 
    } 
    [player setCenter:center]; 
} 

Et, de même dans votre méthode leftRepeater:

- (void)leftrepeater { 
    CGPoint center = (CGPoint)[player center]; 
    center.x -= 10; 
    CGFloat leftEdge = center.x - [player width]/2; 
    if (leftEdge < 0) { 
     center.x -= leftEdge; 
    } 
    [player setCenter:center]; 
} 

Notez que je [player width] pour obtenir la largeur de chaque joueur. Je ne suis pas sûr qu'une telle méthode existe, mais elle devrait suffire à illustrer le concept.

+0

Maintenant XCode me donne l'erreur: opérandes invalides à la méthode binaire/(ont « id » et « int ») deux fois – Flafla2

+0

C'est probablement parce qu'il n'y a pas de '-width()' sur vos joueurs. Voir la note à la toute fin de mon message. Je ne suis pas sûr de ce qu'il faut utiliser pour la largeur du joueur. Je suppose que vous pourriez le coder en dur si vous saviez à quelle distance ils étaient à l'avance. –

+0

Oh, désolé pour ça! la largeur de l'image était de 91 px, j'ai donc remplacé [player width]/2 par 45.5. Merci! – Flafla2