(UIImages の) アニメーションを使用するゲームを作成しようとしていますが、(私にとって) 非常に珍しいバグがあります: 2 つの CGRect 間の交差が発生したときに画像をアニメーション化しようとしました。検出は素晴らしいのですが、アニメーションの動作がおかしいです。コードは次のとおりです。
Coin.h : (UIView クラス)
@property (retain) NSArray * imagesCoinEclate;
いくつかのチュートリアルで、エラーが変数の非保持ステータスに起因する可能性があることを読んだので、保持に入れました
Coin.m :
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
CGImageRef imageToSplitEclate = [UIImage imageNamed:@"Coin_Anim2_Spritesheet4x4_110x100.png"].CGImage;
int x2 = 300;
int y2 = 0;
CGImageRef partOfImgEclate1 = CGImageCreateWithImageInRect(imageToSplitEclate, CGRectMake(x2, y2, 100, 110));
UIImage *imgEclate1 = [UIImage imageWithCGImage:partOfImgEclate1];
CGImageRelease(partOfImgEclate1);
...
x2 = 0;
y2 = 330;
CGImageRef partOfImgEclate16 = CGImageCreateWithImageInRect(imageToSplitEclate, CGRectMake(x2, y2, 100, 110));
UIImage *imgEclate16 = [UIImage imageWithCGImage:partOfImgEclate16];
CGImageRelease(partOfImgEclate16);
_imagesCoinEclate = [NSArray arrayWithObjects:imgEclate1,imgEclate2,imgEclate3,imgEclate4,imgEclate5,imgEclate6,imgEclate7,imgEclate8,imgEclate9,imgEclate10,imgEclate11,imgEclate12,imgEclate13,imgEclate14,imgEclate15,imgEclate16, nil];
}
return self;
}
そして、この配列はメソッドで呼び出されます:
-(void)AnimationCoinExplose:(UIImageView *)imageViewCoin withCurrentX:(float)current
{
[imageViewCoin stopAnimating];
CGPoint centerCoin;
centerCoin.x = currentX;
centerCoin.y = imageViewCoin.center.y - ((imageViewCoin.frame.size.height)/2);
UIImageView * Explode = [[UIImageView alloc] initWithFrame:CGRectMake(currentX + imageViewCoin.center.x, centerCoin.y, imageViewCoin.frame.size.width + 10, imageViewCoin.frame.size.height + 10)];
//NSLog(@"CurrentX : %f\nX : %f\nY : %f\nX size : %f\nY size : %f", currentX, currentX + imageViewCoin.center.x, centerCoin.y, imageViewCoin.frame.size.width + 10, imageViewCoin.frame.size.height + 10);
imageViewCoin.alpha = 0.0f;
[Explode setAnimationImages:_imagesCoinEclate];
[Explode setAnimationRepeatCount:1];
[Explode setAnimationDuration:(1/24)];
[Explode startAnimating];
[self addSubview:Explode];
[Explode release];
_IntersectionCheck = -1;
}
このメソッドは UIViewController で呼び出され、次のように初期化されます。
View = [[Coin alloc] init];
[self.view addSubview:View];
そして、このような加速度計で使用します:
if (View.IntersectionCheck == -1)
{
if (Test.alpha == 1.0f)
{
[View CoinIntersection:Test becausePigX:current.x andPigY:current.y];
}
if (Test2.alpha == 1.0f)
{
[View CoinIntersection:Test2 becausePigX:current.x andPigY:current.y];
}
}
else if (View.IntersectionCheck == 0)
{
}
Coin.m のすべてのコードをメソッドに入れると、
-(void)AnimationCoinExplose:(UIImageView *)imageViewCoin withCurrentX:(float)current
それは完全に機能しますが、初期化中は機能しません。エラーは「EXC_BAD_ACCESS (コード 1)」であり、デバッグ コンソールでは「Nsarray 概要を利用できません」
ご協力いただきありがとうございます !