【发布时间】:2015-04-15 08:17:46
【问题描述】:
我的问题是,我有一个“2.5D”游戏,其中相互接触的角色需要动态改变他们的 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;
}
}
停下来!
【问题讨论】:
-
为什么不直接设置zPosition而不是使用
SKAction runBlock:? -
它是直接在我的原始代码中设置的,我认为可能需要 SKAction 来显式更改它,结果它没有。
-
太棒了。已添加答案。
-
对不起,我的意思是,它最初不适用于:
node.zPosition = node.zPosition -200;,根本没有SKAction runBlock:。更奇怪的是 NSLog 报告了正确的更改,但游戏没有显示它。 -
我可能会调整代码,以便所有 4 个 NSLog 也反映节点名称,只是为了确定。
标签: objective-c sprite-kit collision-detection skspritenode skphysicsbody