저는 하반부와 상반부에 ipad 화면을 나누는 작은 게임을 만들고 있습니다. 각 플레이어는 자신 만의 섹션을 가지고 연주 할 수 있습니다 (한 손가락 연주). 두 명의 플레이어가 동시에 화면을 쳤을 때 한 플레이어에 대한 메소드 만 실행되거나 전혀 실행되지 않기 때문에 뷰에서 멀티 터치를 활성화해야했습니다.멀티 터치로 두 번 발사하는 방법이 있습니다.
그러나 두 명의 플레이어가 정확히 동일한 작업을 수행 할 때 두 번씩 실행되는 메서드가 이상하게 작동합니다. 이것이 현재 작동하는 방식입니다 : 플레이어가보기에서 객체를 터치했는지 확인합니다. 그들이 가지고있는 경우, 메서드가 발생합니다. 플레이어가 객체를 터치했지만 뷰 자체를 터치하지 않으면 다른 메소드가 실행됩니다. 보기가 플레이어 1/2 또는 플레이어 2와 접촉을 구분하기 위해 위 또는 아래쪽 절반에 터치되었는지 확인합니다.
나는 해결책을 생각해 왔지만 이것을 해결할 좋은 방법이 무엇인지 확신 할 수 없다. 어쩌면 각 플레이어의보기 (투명)를 분리해야 터치가 더 쉽게 구별 될 수 있습니까? 여기 내 touchesBegan 방법입니다.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSMutableSet *touchedCirclesPlayerOne = [NSMutableSet set];
NSMutableSet *touchedCirclesPlayerTwo = [NSMutableSet set];
for (UITouch *touch in touches) {
CGPoint touchLocation = [touch locationInView:self.view];
for (Circle *circle in playerOneCircles) {
if ([circle.layer.presentationLayer hitTest:touchLocation]) {
[touchedCirclesPlayerOne addObject:circle];
}
}
for (UITouch *touch in touches) {
CGPoint touchLocation = [touch locationInView:self.view];
for (Circle *circle in playerTwoCircles) {
if ([circle.layer.presentationLayer hitTest:touchLocation]) {
[touchedCirclesPlayerTwo addObject:circle];
}
}
}
if (touchedCirclesPlayerOne.count) {
NSLog(@"test");
for (Circle *circle in touchedCirclesPlayerOne) {
[circle playerTap:nil];
}
} else if (touchedCirclesPlayerTwo.count) {
NSLog(@"test2");
for (Circle *circle in touchedCirclesPlayerTwo) {
[circle SecondPlayerTap:nil];
}
} else {
for (UITouch *touch in touches) {
CGPoint touchLocation = [touch locationInView:self.view];
if (CGRectContainsPoint(CGRectMake(0, self.view.frame.size.height/2, self.view.frame.size.width, self.view.frame.size.height/2), touchLocation)) {
NSLog(@"wrong player 1");
[[NSNotificationCenter defaultCenter] postNotificationName:@"wrong player 1" object:self];
} else {
NSLog(@"wrong player 2");
[[NSNotificationCenter defaultCenter] postNotificationName:@"wrong player 2" object:self];
}
}
}
}
}
여기가 약간 개략적입니다. 이것은 두 선수가 같은 일을 할 때를 제외하고는 모두 작동합니다. 그것은 각 플레이어에 대해 동일한 액션을 두 번 발사합니다.
oh 안녕하세요 :). 당신이 거기에있어 좋은 그리고 논리적 인 해결책. 내가 이렇게 보았을 때 분명하고 분명해 보입니다. 나는 불과 2 개월 동안 코딩을 해왔으므로 여전히 문제가 너무 복잡합니다. 나는 다시 한번 너에게 감사해야한다. –