以下のコードを使用して、画面上を「飛び回る」ホタルを 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;
}
}
「飛行」はうまく機能しますが、ホタルが画面の端にぶつかり、方向を逆にして画面上に保持する場合、ホタルの画像自体はまだ反対の方向に「向いている」ため、半分の時間で後方に飛んでいるように見えます。
ホタルが画面の端に当たったときに方向が反転し、画像自体が反転するように設定したいと思います。
私はこれを試しました:
.h で
@property (nonatomic, assign) BOOL blueIsFacingRight;
.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;
}
}
これで動くと思ったのですが、「壁」に当たっても画像が反転しません
なぜこれが機能しないのか、また、探している効果を達成するためのより良い理由があれば、誰でも説明できますか?