こんにちわ。ご無沙汰ですね(;^_^A
さて今日からは、ゲームの操作のところを作っていきましょう。
今日もコードをざっと載せてみて、とりあえずこんな風に動く!
って確認してから、次回に説明する!というカンジでいきたいと思います。
まず、PlayViewController.hに変数を2つをメソッド1つ追加します。
@interface PlayViewController : UIViewController {
IBOutlet UIImageView *backView;
IBOutlet UIImageView *frontView;
IBOutlet UILabel *scoreLabel;
IBOutlet UILabel *timeLabel;
PlayState state;
BOOL isFinished;
CALayer *movingLayer1;
CALayer *movingLayer2;
}
- (BOOL)swapLayers;
↑赤いところが今回追加したところ。
実際実装するとこんな感じです。

次にPlayViewController.mに以下をまるごと追加します。
追加する場所は@endの手前でいいでしょう(‐^▽^‐)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
if(isFinished || state != PlayStateChoose){
return;
}
UITouch *aTouch = [touches anyObject];
CGPoint pos = [aTouch locationInView:self.view];
pos = [backView.layer convertPoint:pos toLayer:backView.layer.superlayer];
CALayer *layer = [backView.layer hitTest:pos];
if(![layer.name hasPrefix:@"panel"] || movingLayer1 && movingLayer1 == layer){
return;
}
// 2枚目のパネルの選択
if (movingLayer1) {
[movingLayer1 removeAnimationForKey:@"rotation"];
movingLayer2 = layer;
if (![self swapLayers]) {
movingLayer1 = nil;
movingLayer2 = nil;
}
}
// 最初のパネルの選択
if (!movingLayer1) {
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
animation.duration = 1.0;
animation.repeatCount = HUGE_VALF;
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat:M_PI*2];
[layer addAnimation:animation forKey:@"rotation"];
movingLayer1 = layer;
}
}
- (BOOL)swapLayers {
return NO;
}
とりあえず、ここまでコーディングしたら実行してみましょう。
さてどんなんになるかな??
パネルをクリックすると、くるくる回ります!
ほかのパネルを回すと次はそれが回る!
楽しい楽しいp(^-^)q
右上のパネルをクリックした時↓

左下のパネルをクリックした時↓

三角を押したときはなんか回転の中心がずれてる・・・。
用意した図形がおかしかったのかな?
まいっか(^▽^;)
まだ入れ替えはできないけど、次回はこのコードの説明をサクっとしたいと思います。
その前に自分も理解しないと・・・。
ではまた次回~
ランキングに参加しています。下のクリックお願いしますー(*゚ー゚*)


さて今日からは、ゲームの操作のところを作っていきましょう。
今日もコードをざっと載せてみて、とりあえずこんな風に動く!
って確認してから、次回に説明する!というカンジでいきたいと思います。
まず、PlayViewController.hに変数を2つをメソッド1つ追加します。
@interface PlayViewController : UIViewController {
IBOutlet UIImageView *backView;
IBOutlet UIImageView *frontView;
IBOutlet UILabel *scoreLabel;
IBOutlet UILabel *timeLabel;
PlayState state;
BOOL isFinished;
CALayer *movingLayer1;
CALayer *movingLayer2;
}
- (BOOL)swapLayers;
↑赤いところが今回追加したところ。
実際実装するとこんな感じです。

次にPlayViewController.mに以下をまるごと追加します。
追加する場所は@endの手前でいいでしょう(‐^▽^‐)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
if(isFinished || state != PlayStateChoose){
return;
}
UITouch *aTouch = [touches anyObject];
CGPoint pos = [aTouch locationInView:self.view];
pos = [backView.layer convertPoint:pos toLayer:backView.layer.superlayer];
CALayer *layer = [backView.layer hitTest:pos];
if(![layer.name hasPrefix:@"panel"] || movingLayer1 && movingLayer1 == layer){
return;
}
// 2枚目のパネルの選択
if (movingLayer1) {
[movingLayer1 removeAnimationForKey:@"rotation"];
movingLayer2 = layer;
if (![self swapLayers]) {
movingLayer1 = nil;
movingLayer2 = nil;
}
}
// 最初のパネルの選択
if (!movingLayer1) {
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
animation.duration = 1.0;
animation.repeatCount = HUGE_VALF;
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat:M_PI*2];
[layer addAnimation:animation forKey:@"rotation"];
movingLayer1 = layer;
}
}
- (BOOL)swapLayers {
return NO;
}
とりあえず、ここまでコーディングしたら実行してみましょう。
さてどんなんになるかな??
パネルをクリックすると、くるくる回ります!
ほかのパネルを回すと次はそれが回る!
楽しい楽しいp(^-^)q
右上のパネルをクリックした時↓

左下のパネルをクリックした時↓

三角を押したときはなんか回転の中心がずれてる・・・。
用意した図形がおかしかったのかな?
まいっか(^▽^;)
まだ入れ替えはできないけど、次回はこのコードの説明をサクっとしたいと思います。
その前に自分も理解しないと・・・。
ではまた次回~
ランキングに参加しています。下のクリックお願いしますー(*゚ー゚*)