我正在使用 GLKit(不使用 Cocos2d)创建游戏,我基本上需要两个“按钮”——每个按钮 250 点宽,并在横向模式下放置在相对的两侧。MultipleTouch 是 YES,因为我需要跟踪不止一个触摸。
在 touchesbegan 中,我确定 touch.x <= 250(按钮 1)或 >= view.bounds.size.width - 250(按钮 2)。基于此,我将 BOOL 设置为 YES 来确定状态。
在 touchesended 中,我想知道用户何时不再“按下”按钮 1 或按钮 2。问题是 - 我不能再测试触摸发生在视图中的位置,因为用户可能已经移动了手指,所以它不是超过最初按下的“按钮”。这意味着如果用户通过按下 Button 1 开始触摸但将手指移到 Button 边界之外然后抬起手指 - 状态仍然是 YES。
有没有一种好方法可以可靠地跟踪 TouchesEnded 中触摸的首次开始位置?任何指向源代码的指针都将受到高度赞赏。
编辑: 这是我创建的代码:
请注意,我知道此代码是错误的,因为它只跟踪一次触摸。但是,我想要实现的是当用户按下左键并将取景器移出该按钮时.. 我需要知道 touchesEnded 中的触摸相当于早先在按钮中开始的触摸,所以我知道该按钮不再“按下”。
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
// Determine where the touch happened
CGPoint p = [touch locationInView:self.view];
// If the user pressed the left gutter then break
if ( p.x <= 250 )
isBreaking = YES;
// If the user pressed the right gutter then accelerate
if ( p.x >= (self.view.bounds.size.width - 250) )
isAccelerating = YES;
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
// Determine where the touch happened
CGPoint p = [touch locationInView:self.view];
// If the user pressed the left gutter then stop break
if ( p.x <= 250 )
isBreaking = NO;
// If the user pressed the right gutter then stop accelerate
if ( p.x >= (self.view.bounds.size.width - 250) )
isAccelerating = NO;
}