2009-12-19 4 views
1

Я делаю простую игру, где вы нажимаете левую/правую кнопку, а UIImageView перемещается и анимируется. Вот проблема: я хочу, чтобы UIImageView переставал двигаться, когда он касался Попытка заставить UIImageView перестать двигаться, когда он попадает в рамки экрана ... помогите!


self.view.bounds.size.width 

Как это сделать?

Вот существующий код:


    - (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]; 

} 

Любая помощь будет оценена. Благодаря!

ответ

1

В вашем методе 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]; 
} 

И так же в методе 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]; 
} 

Обратите внимание, что я использовал [player width], чтобы получить ширину каждого игрока. Я не уверен, существует ли такой метод, но этого достаточно, чтобы проиллюстрировать концепцию.

+0

Теперь XCode дает мне ошибку: недопустимые операнды для двоичных/(имеют 'id' и 'int') дважды – Flafla2

+0

Это, вероятно, потому, что на ваших плечах нет метода '-width()'. См. Примечание в самом конце моего сообщения. Я не уверен, что использовать для ширины игрока. Полагаю, вы могли бы это сделать, если бы знали, насколько они были раньше. –

+0

О, простите! ширина изображения составляла 91 px, поэтому я заменил [ширина игрока]/2 на 45,5. Благодаря! – Flafla2