更新我有NSLogged [[event touchesForView:self.view] count]
和touches count
,并且在出现故障时输出2
和1
,所以它看来事件正在以某种方式丢失?
这是我的两个简单方法:(更新)
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
CGPoint touchLocation = [touch locationInNode:self];
if (touchLocation.x < self.size.width / 2.0f) {
NSLog(@"left");
touching = YES;
}
if (touchLocation.x > self.size.width / 2.0f) {
NSLog(@"right");
if (![rocketFlame parent]) {
[self fireRocket];
}
}
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
for (UITouch *touch in touches) {
NSLog([[event touchesForView:self.view] count]);
NSLog([touches count]);
CGPoint touchLocation = [touch locationInNode:self];
if (touchLocation.x < self.size.width / 2.0f) {
NSLog(@"left off");
touching = NO;
}
if (touchLocation.x > self.size.width / 2.0f) {
NSLog(@"right off");
//do nothing
}
}
}
问题是,我遇到了一个错误,游戏无法感知屏幕左侧的结束触摸。我不确定这个错误是否也会影响屏幕的右侧,因为该操作只运行一次并且不是连续动作所以我不会注意到它是否感觉不到结束的触摸。
基本上,如果我同时触摸并同时结束我的触摸,它会运行fireRocket
并将touching
更改为YES
,但绝不会将touching
更改回{{1}即使两个手指都被抬起来了。
这是日志输出:
NO
答案 0 :(得分:2)
我的主要怀疑是,一旦有两次触摸,它就会合并成一个事件。因此,当移除最后一根手指时,它会调用touchesEnd回调方法。
有几种方法可以处理您的解决方案。
第一个一个在touchesEnd
,看看[[event touchesForView:self.view] count]
是否返回大于1的数字。一旦大于2,请循环[event touchesForView:self.view]
并确保它符合你的#34;权利&#34;和&#34;左&#34;标准。
第二个选项是在YES
内设置为touchesBegan
的其他布尔变量,但仅限于左右注册时。我在想像&#34; leftTouched&#34;并且&#34; rightTouched&#34;。在touchesEnd
方法中,只需查看变量是否设置为YES
。请务必添加代码,以便在NO
方法结束时将其重置为touchesEnd
。