こんにちわ!

さて早速始めましょう(‐^▽^‐)

2枚目のパネルを選択した時に、swapLayersメソッドを呼び出して、

交換して、交換できたらRETURNYESにして返すという話だけしました。よね?

その交換メソッドは、今のところはなにもせずにNOを返してました。
こんなふうに↓
- (BOOL)swapLayers {
return NO;
}

つまり交換できなかったということです。

今日はこの中身をコーディングします。

では、NOだけ返してるswapLayersを以下の様にしてみてください。


- (BOOL)swapLayers {
CGPoint panelPos1 = movingLayer1.position;
CGPoint panelPos2 = movingLayer2.position;

int px1 = (panelPos1.x - 59) / (42 + 1);
int py1 = (panelPos1.y - 53) / (42 + 1);
int px2 = (panelPos2.x - 59) / (42 + 1);
int py2 = (panelPos2.y - 53) / (42 + 1);

int dx = px2 - px1;
int dy = py2 - py1;

if (dx == 0 && abs(dy) == 1 || abs(dx) == 1 && dy == 0) {
state = PlayStateChange;
CABasicAnimation *anime1 =
[CABasicAnimation animationWithKeyPath:@"position"];
anime1.duration = 0.4;
anime1.fromValue = [NSValue valueWithCGPoint:panelPos1];
anime1.toValue = [NSValue valueWithCGPoint:panelPos2];
movingLayer1.position = panelPos2;
[movingLayer1 addAnimation:anime1 forKey:nil];

CABasicAnimation *anime2 =
[CABasicAnimation animationWithKeyPath:@"position"];
anime2.duration = 0.4;
anime2.fromValue = [NSValue valueWithCGPoint:panelPos2];
anime2.toValue = [NSValue valueWithCGPoint:panelPos1];
movingLayer2.position = panelPos1;
[movingLayer2 addAnimation:anime2 forKey:nil];

[NSTimer scheduledTimerWithTimeInterval:0.4
target:self
selector:@selector(finishChange:)
userInfo:nil
repeats:NO];
return YES;
}

return NO;
}



そして、もう一つ下のメソッドを追加してください。

- (void)finishChange:(NSTimer *)timer {
if (YES) { // TODO: あとでパネル消滅の判定を付ける
// 消せない場合、交換したパネルを元に戻す

CGPoint panelPos1 = movingLayer2.position;
CGPoint panelPos2 = movingLayer1.position;
movingLayer1.position = panelPos1;
movingLayer2.position = panelPos2;
movingLayer1 = nil;
movingLayer2 = nil;
state = PlayStateChoose;
}
}


これらはそんなに難しいことはしてないです。
解説は次回にしますが、座標の指定と計算と、アニメーションの設定と実行だけです。
下のfinishChangeメソッドは、パネルを交換した時に、消せるかどうかを判定しています。
でも消す処理を一緒にすると長くなるので、ひとまず消せなかったこと「YES」として、
処理を続行してパネルを元の位置に戻すことをしています。

それでは、実行して見ましょう。

プレイ画面から、パネルをひとつクリック!
「+」がくるくるまわります。

無知の状態からiPhoneアプリ開発に挑んでみる-2011-6-5-1

左の青い六角形をクリックすると、ツーっと入れ替わろうとします
無知の状態からiPhoneアプリ開発に挑んでみる-2011-6-5-2

けど、先ほど説明した通り、パネルを消すのは後回しにしたので、
ちゅるりんっと元に戻ります。

どうでしょう?

うまくできましたか?

では続きは次回に(^∇^)


にほんブログ村 IT技術ブログ iPhoneアプリ開発へ

にほんブログ村 携帯ブログ iPhoneへ