У меня есть 10 светлячков, которые я заставляю «летать» по экрану, используя приведенный ниже код. Код также служит для удержания светлячков на экране.
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *blueArray = [NSArray array];
blueArray = [[NSArray alloc] initWithObjects:
[UIImage imageNamed:@"blue1.png"],
[UIImage imageNamed:@"blue2.png"], nil];
blue.animationImages = blueArray;
blue.animationDuration = 0.20;
blue.animationRepeatCount = -1;
[blue startAnimating];
bluepos =CGPointMake(2.0, 1.5);
}
-(void) someMethod {
endingAnimationTimer = [NSTimer scheduledTimerWithTimeInterval:(0.03) target:self selector:@selector(makeFly) userInfo:nil repeats:YES];
}
-(void) makeFly {
blue.center = CGPointMake(blue.center.x+bluepos.x, blue.center.y+bluepos.y);{
if(blue.center.x > 480 || blue.center.x <0)
bluepos.x = -bluepos.x;
if(blue.center.y > 320 || blue.center.y <0)
bluepos.y = -bluepos.y;
}
}
«Полет» работает отлично, за исключением того, что когда светлячки ударяются о край экрана и меняют направление, чтобы удержать их на экране, само изображение светлячка все еще «обращено» в другом направлении, поэтому кажется, что они летят назад половину времени.
Я хочу настроить его так, чтобы, когда светлячки попадали на край экрана, они меняли направление И само изображение было обратным.
Я пробовал это:
In .h
@property (nonatomic, assign) BOOL blueIsFacingRight;
In .m
@synthesize blueIsFacingRight;
-(void) makeFly {
blue.center = CGPointMake(blue.center.x+bluepos.x, blue.center.y+bluepos.y); {
if(blue.center.x > 480 ) {
if (blueIsFacingRight == YES) {
blue.transform = CGAffineTransformMakeScale(-1, 1);
blueIsFacingRight = NO;
}
bluepos.x = -bluepos.x;
}
if(blue.center.x <0) {
bluepos.x = -bluepos.x;
if (blueIsFacingRight == NO) {
blue.transform = CGAffineTransformMakeScale(1, 1);
blueIsFacingRight = YES;
}
}
if(blue.center.y > 320 )
bluepos.y = -bluepos.y;
if( blue.center.y <0)
bluepos.y = -bluepos.y;
}
}
Я думал, что это сработает, но изображение не переворачивается, когда оно попадает в «стену».
Может ли кто-нибудь объяснить, почему это не работает, и если есть лучший способ добиться эффекта, который я ищу?