Моя проблема: у меня есть игра «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!
Почему бы не установить zPosition напрямую, а не использовать 'SKAction runBlock:'? – ZeMoon
Он был установлен непосредственно в моем исходном коде, я подумал, что, возможно, требуется, чтобы SKAction явно менял его, оказывается, это не так. – Astirian
Отлично. Добавили ответ. – ZeMoon