2012-07-07 2 views
2

저는 cocos2Dm에서 새로운 것이고 해결할 수없는 문제에 봉착했습니다. 지금까지 레이어에서 2 개의 스프라이트를 가져 왔습니다. touchable, 그들 중 하나는 다른 스프라이트를 추가했습니다, 나는 하나의 테이블에서 다른 테이블로 옮기고 싶습니다. 나는 터치하는 오브제를 인식하고 있습니다. & 그들을 움직이면, 제 부모는 부모가 될 수 없습니다. 다른 테이블에서 다른 방법으로 부모로부터 객체를 제거하려고 시도했습니다. & 새 부모를 추가하지 않았지만 작동하지 않는 것처럼 보입니다. 객체가 제거되지 않아 복제 되었기 때문에 터치 할 때 제거하려고했습니다. 그것. 내가 touchbegan에서이 함수를 호출 _objectsToDrag &의 객체를 포함하고 있습니다 : 주위를 이동 _selectedObject를 사용하여 다음cocos2D에서 CCSprite의 부모 변경

- (void) lookForObjectWithTouchLocation:(CGPoint)touchLocation 
{ 
    for (RICCObject *object in _objectsToDrag) { 
     if (CGRectContainsPoint(object.boundingBox, touchLocation)) { 
      _selectedObject = object; 
     } 
    } 
    if (_selectedObject) { 
     [self objectSelectedWithLocation:touchLocation]; 
    } 
} 

을 그리고,이 문제입니까? 배열에서 로컬 객체 대신 공상을 사용해야합니까?

어떤 도움을 가 사전에 감사 환영

+0

http://stackoverflow.com/questions/6720615/how-to-transfer-a-ccsprite-from-one-parent-to-another – Narek

답변

5

, 따라이 과정을 다른 하나 개의 상위 노드 (CCSprite, CCLabelTTF 등 같은) CCNode에서 파생되는 클래스의 인스턴스를 이동하려면 :

// get yourNode in whatever way fits your implementation ... 
CCNode* nodeToMove = yourNode; 
// not cleaning up leaves actions running 
[nodeToMove removeFromParentAndCleanup:NO]; 
// add the removed node to its new parent node 
[newParentNode addChild:nodeToMove]; 

이 프로세스는 노드를 저장하는 방법 또는 위치와 관계없이 작동합니다.

노드가 중복되는 것을 보면 이전 노드를 제거하지 않고 새 노드를 만들거나 두 노드가 있어야한다는 것에 유의하십시오. cocos2d에서 CCNode는 하나의 상위 노드 만 가질 수 있으며 이미 다른 노드에 상위 노드가있는 노드를 추가하려고하면 오류 메시지가 나타납니다. 노드가 중복 된 노드가있는 경우 부모 노드를 제거한 후에도 계속 노드를 제거하지 않으면 원인을 찾을 수 있습니다. 이는 실제로 동일한 노드의 여러 버전을 만들 때를 제외하고는 정상적인 상황에서는 발생하지 않습니다.

+0

나는 이미 시도했지만 ccsprite를 제거 할 수있는 것처럼 보입니다. 버튼,하지만 내가 제거하고 싶은 물건을 만질 수는 없었다. – Oscar

+0

이것으로 정확히 무엇을 의미합니까? – tallen11

+0

나는 요소를 제거한 후에 제거하지 않겠지 만, 다른 방법으로 제거하려고 시도했지만 작동하지 않지만 올바른 객체를 만지면 작동하지 않을 수 있습니다. m 선택한 객체를 pont하도록 인스턴스 변수를 설정합니까? – Oscar

관련 문제