这是我试图完成的事情:
场景中有两个精灵节点,而self是一个边循环。
如果nodeA触及nobeB,则停止。 >>赢
如果nodeA触及自己。 >>输
如果nodeA触及nobeB但没有停止并触及自己。 >>输
因此我需要一些像这样的东西:
typedef NS_OPTIONS(aero, SpriteNodeCategory)
{
SpriteNodeCategoryA = 1 << 0,
SpriteNodeCategoryB = 1 << 1,
};
-(void)didBeginContact:(SKPhysicsContact *)contact
{
aero collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (SpriteNodeCategoryA|SpriteNodeCategoryB)) {
//something here I don't know...
}
if (collision == (SpriteNodeCategoryA|SpriteNodeCategoryB)) {
NSLog(@"FAIL");
}
}
答案 0 :(得分:2)
你有另一个方法委托(SKPhysicsContactDelegate)来完成你所要求的工作:
- (void)didEndContact:(SKPhysicsContact *)contact
答案 1 :(得分:1)
好的,这将有点困难。
首先,您可以使用“didSimulatePhysics”来更新模拟
-(void)didSimulatePhysics
{
if (_yourNode.physicsBody.angularVelocity == 0 && newGame) {
if (_yourNode.userData[@"winningCondition"]) {
[self win];
};
}
}
这就是它更新并查看你是否有获胜条件 - 这是从碰撞中获得的(想想:逆向工程)
P.S。 _yourNode.physicsBody.angularVelocity == 0表示您的节点完全静止
-(void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
_yourNode.userData = [@{@"winningCondition":@(YES)} mutableCopy];
}
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryEdge)) {
[self lose];
}
}
-(void)didEndContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
_yourNode.userData = [@{@"winningCondition":@(NO)} mutableCopy];
}
}
所以基本上当A接触B时,它通过向你的节点添加“userData”来为你提供胜利条件。
其余的很直接。我想你明白了。