2012-08-16 2 views
1

저는 Cocos2D를 사용하여 간단한 게임을 만들고 있습니다. 사용자는 작은 움직이는 물체의 경로를 만지고 추적 할 수 있습니다. 그런 다음 개체가 경로를 따릅니다. 이것은 비행 제어 게임 메카닉과 유사합니다.iPhone 용 Cocos2D로 라인 드로잉

내 코드는 거의 항상 잘 작동합니다. 그러나 때로는 객체를 만지고 드래그하려고 시도하지만 터치 콜백이 실행되지 않습니다.

  • 작은 움직이는 물체는 객체에있는 내가 한번의 터치 매개 변수 (ccTouchMoved:withEvent: 등) ccTouchBegan:withEvent: 같은
  • 모든 콜백을 터치 콜백을 사용하고 CCLayer
  • 을 상속 : 내 코드는 일반적으로 방법은 다음과 (메인 게임 레이어 대신)

위에서 언급 한 오류가 발생하지 않도록 터치 처리를 개선하려면 어떻게해야합니까?

내 생각은 다음과 같습니다. 터치 콜백은 사용자가 객체에 손을 대려고 할 때 바로 움직이기 때문에 항상 움직이지 않습니다. 이것은 터치의 집합을 매개 변수로 갖는 콜백을 사용하여 메인 게임 레이어의 터치를 처리함으로써 해결 될 수 있습니다. 총 개체 수는 비교적 적기 때문에 (50 개 미만) 각 터치 위치를 각 개체와 비교할 수 있습니다.

또한 객체의 터치 가능한 영역을 늘려 보았습니다 (1.5 곱하기에 유의하십시오). 이것은 도움을주는 것처럼 보이지만 문제를 해결하지는 못했습니다.

- (BOOL) ccTouchBegan:(UITouch *) touch withEvent:(UIEvent *) event { 
    CGSize size = self.contentSize; 
    CGRect rect = CGRectMake(-size.width/2.0, 
          -size.height/2.0, 
           size.width * 1.5, 
           size.height * 1.5); 
    return CGRectContainsPoint(rect, [self convertTouchToNodeSpace:touch]); 
} 

시도 할 또 다른 사항은 개체의 속도를 높이고 콜백이 더 자주 발생하지 않는지 확인하는 것입니다. 현재 개체가 천천히 움직입니다.

도움을 주시면 감사하겠습니다.

답변

1

IIRC, 노드의 원점은 왼쪽 하단에 있습니다. 시도해보십시오.

CGRect rect = CGRectMake(0, 0, size.width, size.height); 
return CGRectContainsPoint(rect, [self convertTouchToNodeSpace:touch]); 
+0

나는 당신이 옳다고 생각합니다. 위의 코드에서 버그를 발견했습니다. 내가 지금 사용하고있는 rect는 문제를 해결 한 것으로 보이는'(-width, -height, 2 * width, 2 * height)'입니다. – SundayMonday