1

以下のコードを使用して、画面上を「飛び回る」ホタルを 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;
    }
}

これで動くと思ったのですが、「壁」に当たっても画像が反転しません

なぜこれが機能しないのか、また、探している効果を達成するためのより良い理由があれば、誰でも説明できますか?

ここに画像の説明を入力

4

2 に答える 2

2

どちらの場合も、変換 X 値を -1 に設定しています。右向きの場合は、この CGAffineTransformMakeScale(1, 1); のように変換を設定する必要があります。

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;
    }
}
于 2013-02-03T03:29:38.847 に答える
0
**blue.transform =CGAffineTransformIdentity;**

上記は私のmakeFlyメソッドで、画像を反転していた上記の他の多くのものを使用していたので、次にメソッドが呼び出されたときに変更を元に戻していました(0.03以降)

男私は愚かだと思う

于 2013-02-04T00:15:05.233 に答える