Освобождение CocosNode и добавление его дочерних элементов в Layer в Cocos2d - PullRequest
1 голос
/ 02 октября 2009

Я работаю над клоном Tetris в Cocos2d для iPhone, и я использую класс Sprites для отдельных блоков и класс Tetromino CocosNode, который пользователь контролирует для перемещения блоков. Все эти блоки перемещаются в виде сетки 20 на 10 пустых блоков на GameBoardLayer.

Когда блок заканчивает падать, я хотел бы выпустить Tetromino и прикрепить его дочерние блоки к GameBoardLayer, чтобы позволить им перемещаться независимо и создать новое Tetromino для пользователя.

Я попытался переопределить removeChild: в слое:

- (void)removeChild: (CocosNode*)child cleanup:(BOOL)cleanup
{
    if ([child isEqual:userTetromino]) {
        for (Block *currentBlock in userTetromino.children) {
            [self addChild:currentBlock];
            [userTetromino removeChild:currentBlock cleanup:YES];


        }
    }

    [super removeChild:child cleanup:cleanup];
}

Но, похоже, я не могу добавить дочерний элемент дважды, поскольку он уже является дочерним элементом Layer через Tetromino. Есть мысли?

1 Ответ

1 голос
/ 06 октября 2009

Почему бы вам не поменять местами addChild и removeChild?

- (void)removeChild: (CocosNode*)child cleanup:(BOOL)cleanup
{
    if ([child isEqual:userTetromino]) {
        for (Block *currentBlock in userTetromino.children) {
                // The following lines are swapped here.
                [userTetromino removeChild:currentBlock cleanup:YES];
                [self addChild:currentBlock];


        }
    }

    [super removeChild:child cleanup:cleanup];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...