Sprite Kit中同时发生两次或多次碰撞

时间:2014-02-11 13:55:48

标签: ios iphone objective-c cocoa-touch sprite-kit

我有一点问题,不能自己知道解决方案。我正在使用Sprite Kit处理碰撞,当我的英雄同时与两个物体碰撞时(例如地面和空中的立方体),我遇到了问题。

我得到了一个布尔人,告诉他什么时候英雄跳跃,当他以极快的速度奔跑,当他跑得很慢时(例如当他与立方体制成的墙碰撞时)。

在最后一个例子中,我的布尔变得疯狂,有时我的英雄只是越过立方体,因为速度不会减慢。有时布尔“跳跃”也会激活,所以在恢复中它会变得疯狂,我认为这是因为处理碰撞方法(didBeginContact)只允许两个联系人,即contact.bodyA和contact.bodyB。

我想知道我是否可以编辑文件来添加contact.bodyC以及我需要编辑哪个文件?如果是,我会处理这个,我想有三个联系机构,我将能够编程所有可能的案件。如果没有,那么我想我将不得不删除那些立方体墙或更改他们的类别位掩码...

1 个答案:

答案 0 :(得分:3)

可能排队联系人并处理然后在-update就是你需要的。例如:

声明一个名为NSMutableArray * _contactQueue的实例变量; 将联系人添加到阵列:

-(void) didBeginContact:(SKPhysicsContact *)contact
{
    [_contactQueue addObject:contact];
}

创建一种方法来处理与游戏标记同步的每个联系人:

-(void)processContactsForUpdate:(NSTimeInterval)currentTime
{
    for (SKPhysicsContact * contact in [_contactQueue copy]) {
        [self handleContact:contact];
        [_contactQueue removeObject:contact];
    }
}

从更新中调用此方法:

[self processContactsForUpdate:currentTime];

然后实现将处理联系人的句柄方法。

-(void) handleContact:(SKPhysicsContact *)contact
{
    // What you are doing in your current didBeginContact method
}

您只能处理两个物体的接触,但这样它与每个物体同步。我在this tutorial

的SpriteKit教程后了解到了这一点