我有一点问题,不能自己知道解决方案。我正在使用Sprite Kit处理碰撞,当我的英雄同时与两个物体碰撞时(例如地面和空中的立方体),我遇到了问题。
我得到了一个布尔人,告诉他什么时候英雄跳跃,当他以极快的速度奔跑,当他跑得很慢时(例如当他与立方体制成的墙碰撞时)。
在最后一个例子中,我的布尔变得疯狂,有时我的英雄只是越过立方体,因为速度不会减慢。有时布尔“跳跃”也会激活,所以在恢复中它会变得疯狂,我认为这是因为处理碰撞方法(didBeginContact)只允许两个联系人,即contact.bodyA和contact.bodyB。
我想知道我是否可以编辑文件来添加contact.bodyC以及我需要编辑哪个文件?如果是,我会处理这个,我想有三个联系机构,我将能够编程所有可能的案件。如果没有,那么我想我将不得不删除那些立方体墙或更改他们的类别位掩码...
答案 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教程后了解到了这一点