适可而止。
就像标题说的那样,我有点苦恼。
所以这是我的问题的概要。我有这艘船的权利。它位于屏幕的中心底部 (240,0)。当用户在大于 240 的点向右触摸时,船向右移动。如果用户在小于 240 的点上触摸,则离开。但是,当一次只有一根手指在屏幕上时,这很好。如果用户向右触摸,没有抬起手指,然后向左触摸(哦,废话,屏幕上有两个手指),我需要它到哪里,船一直向右移动,直到他们抬起右手,然后突然船向左移动第二次触摸。
我正在使用计时器从当前 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”的控件。如果你能帮忙,我会永远爱你。
澄清一下,我希望这种情况发生:
- 用户触摸屏幕右侧
- 船向右移动
- 用户用第二根手指触摸屏幕左侧
- 由于用户没有抬起他们的第一次触摸,所以船仍在向右移动,然后用户抬起了第一次触摸
- 然后船立即改变航向向左移动到第二次触摸
现在我启用了多点触控,所以现在它的工作原理是这样的:
- 用户触摸屏幕右侧
- 船向右移动
- 用户用第二根手指触摸屏幕左侧
- 船向左移动,然后用户抬起第一次触摸
- 即使用户没有抬起第二次触摸,船也会停止在其轨道上