いい加減にしろ。
タイトルが言うように、私は少し漬け物になっています。
これが私の問題の概要です。私はこの船を正しく持っています。画面の中央下部(240,0)にあります。ユーザーが240を超えるポイントで右にタッチすると、船は右に移動します。そして、ユーザーが240未満のポイントでタッチした場合は左に移動します。ただし、画面上に一度に1本の指しかない場合はこれが最適です。ユーザーが右に触れて指を離さずに左に触れた場合(画面に2本の指があります)、右の指を離すまで船は右に動き続け、突然船は左に向かって移動します。セカンドタッチ。
タイマーを使用して、現在のx座標から数値を加算/減算して、移動させています。
これは私が一言で言えば持っているものです:(私は初心者です笑ったり嫌ったりしないでください)
-(void)moveShipLeft:(id)sender {
shipView.center = CGPointMake(shipView.center.x - 2, 320 - (shipView.image.size.height / 2));
}
-(void)moveShipRight:(id)sender {
shipView.center = CGPointMake(shipView.center.x + 2, 320 - (shipView.image.size.height / 2));
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
if (240 < location.x){rightTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(moveShipRight:) userInfo:nil repeats:YES];}
if (240 > location.x){leftTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(moveShipLeft:) userInfo:nil repeats:YES];}
[shipView setCenter:shipView.center];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
if (rightTimer != nil) //Kill the timer that goes right upon touch removal
[rightTimer invalidate];
rightTimer = nil;
if (leftTimer != nil) //Kill the timer that goes left on touch removal
[leftTimer invalidate];
leftTimer = nil;
}
助けがあれば、ゲーム「Radiant」のコントロールを完全に複製しようとしています。あなたが助けてくれれば、私はあなたを永遠に真剣に愛します。
明確にするために、私はこれを実現させたいと思います。
- ユーザーが画面の右側に触れる
- 船は右に移動します
- ユーザーが人差し指で画面の左側に触れる
- ユーザーが最初のタッチを持ち上げていないために船がまだ右に動いている間に、ユーザーは最初のタッチを持ち上げます
- その後、船は即座に進路を変更し、2番目のタッチに向かって左に移動します
現在、マルチタッチを有効にしているので、次のように機能します。
- ユーザーが画面の右側に触れる
- 船は右に移動します
- ユーザーが人差し指で画面の左側に触れる
- 船が左に移動し、ユーザーが最初のタッチを持ち上げます
- ユーザーが2回目のタッチを解除していなくても、船はトラックで停止します