我正在使用GLKit创建游戏(不使用Cocos2d),我基本上需要两个"按钮" - 每个按钮250点宽,并以横向模式放置在相对侧。 MultipleTouch是YES,因为我需要跟踪多个触摸。
在touchesbegan中,我确定touch.x< = 250(按钮1)或> = view.bounds.size.width - 250(按钮2)。基于此,我将BOOL设置为YES以确定状态。
在touchesended中我想知道用户何时不再是"按"按钮1或按钮2.事情是 - 我不能只测试视图中触摸发生的位置,因为用户可能已经移动了手指,因此它不再超过"按钮"这是最初的压力。这意味着如果用户通过按下按钮1来开始触摸,但是将手指移动到按钮边界之外然后抬起手指 - 状态仍然是“是”。
有没有一种可靠的方法来可靠地跟踪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;
}
答案 0 :(得分:1)
我认为我找到了解决方案,但我尚未对其进行测试:http://www.blumtnwerx.com/blog/2009/06/taming-touch-multi-touch-on-the-iphone/
我真正需要知道的是文档:
UITouch对象在多点触控序列中是持久的。处理事件时,永远不应保留UITouch对象。如果你 你需要保持从一个阶段到另一个阶段的触摸信息 应该从UITouch对象复制该信息。