2

私はcocos2Dmの初心者で、解決できない問題に直面しています。これまでのところ、レイヤーに2つのスプライト(テーブルと呼びましょう)があり、タッチ可能で、そのうちの1つに他のスプライトが追加されています。あるテーブルから別のテーブルに移動したいのですが、触れたオブジェクトを認識して移動します。問題は、親を別のテーブルに変更できないことです。オブジェクトを親から削除しようとしました。さまざまな方法で新しい親を追加しますが、機能していないようです。オブジェクトが複製されているため、削除されていません。タッチしたときに削除しようとしました。オブジェクトを_objectsToDragに保存し、touchbeganでこの関数を呼び出しています。

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

そして、_selectedObjectを使用して移動しますが、これは問題ですか?配列内のローカルオブジェクトの代わりにaributesを使用する必要がありますか?

どんな助けでも大歓迎ですよろしくお願いします

4

1 に答える 1

5

CCNodeから派生したクラスのインスタンス(CCSprite、CCLabelTTFなど)をある親ノードから別の親ノードに移動するには、次のプロセスに従います。

// 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];

このプロセスは、ノードを保存する方法や場所に関係なく機能します。

ノードが複製されている場合は、古いノードを削除せずに新しいノードを作成するか、最初に2つのノードがあることに注意してください。cocos2dでは、CCNodeは1つの親しか持つことができず、すでに親を持っているノードを別のノードに追加しようとすると、エラーメッセージが表示されます。ノードが重複している場合は、親からノードを削除しても画面に表示されたままになるので、最初にその原因を見つけてください。これは、同じノードの複数のバージョンを実際に作成する場合を除いて、通常の状況では発生しません。

于 2012-07-07T11:21:25.767 に答える