0

Моя проблема: у меня есть игра «2.5D», в которой персонажи, которые вступают в контакт друг с другом, должны динамически изменять их zPosition. Для этого я использую физические тела.SpriteKit - дочерний элемент моего узла, похоже, не меняет свой атрибут zPosition

Он работает нормально с символами, однако щит, который они удерживают (дочерний объект), не подходит, даже если я регистрирую правильное изменение атрибута zPosition.

if (((firstNode.categoryBitMask & dudeCategory) != 0) && ((secondNode.categoryBitMask & shieldGuyCategory) !=0)) 
{ 
    if ((firstNode.node.position.y < secondNode.node.parent.position.y)) 
    { 
     [secondNode.node.parent enumerateChildNodesWithName:@"shieldNode" usingBlock:^(SKNode *node, BOOL *stop){ 
      NSLog(@"Ooh I Say! Shield zPos = %f", node.zPosition); 

      SKAction *zPos = [SKAction runBlock:^{ 
       node.zPosition = node.zPosition -200; 

       NSLog(@"And now, %@ zPos = %f", node.name, node.zPosition); 
       NSLog(@"But static NPC zPos = %f", firstNode.node.zPosition); 
       NSLog(@"And finally, Shield-holder Guy zPos = %f", secondNode.node.parent.zPosition); 
      }]; 

      [node runAction:zPos]; 
     }]; 

     secondNode.node.parent.zPosition = secondNode.node.parent.zPosition -200; 
    } 
} 

Halp!

+2

Почему бы не установить zPosition напрямую, а не использовать 'SKAction runBlock:'? – ZeMoon

+0

Он был установлен непосредственно в моем исходном коде, я подумал, что, возможно, требуется, чтобы SKAction явно менял его, оказывается, это не так. – Astirian

+0

Отлично. Добавили ответ. – ZeMoon

ответ

0

Таким образом, оказывается, что я устанавливал zPosition для экрана в своем методе. Удаление, которое восстанавливает нормальное поведение, когда родительский параметр изменяет zPosition, если он явно объявлен, как представляется, переопределяет вложенное поведение.

0

Вместо установки zPosition с помощью SKAction runBlock: установите его непосредственно.

[secondNode.node.parent enumerateChildNodesWithName:@"shieldNode" usingBlock:^(SKNode *node, BOOL *stop){ 
     node.zPosition -= 200; 
    }]; 
Смежные вопросы