sprite kit碰撞在2个对象之间不准确

时间:2014-09-24 11:04:46

标签: ios objective-c sprite-kit collision-detection physics

我有一个受重力影响的红色方块,可以跳到从右到左的蓝色方块。 我认为这些块是平台,如果红色方块位于平台顶部,我不删除平台,如果左侧发生碰撞,我只删除这个。

我有一个问题,我试图解决。

当平台顶部发生碰撞时,为了检测它是否在顶部,我写了一个条件,知道红色方块的向下位置是否低于平台的顶部我删除了这个。 / p>

if(([SQUARE getDownPosY] < [PLATFORM getUpPosY]-5)){
    // Delete the blue platform 
}

我设置-5因为有时在碰撞时方块碰撞但进入平台(当方形跳跃更频繁或当场景的重力更高时),即使我设置使用精确碰撞2个主体。(我控制方法didBeginContact中的位置)。 但有时在这种情况下,墙被删除,因为它在平台内超过5个像素)。问题是方形受重力影响而下降,我认为在跌倒期间每个像素可能每隔6个像素没有精确检测到碰撞,如果最后一个检测发生在平台和方形之间的1个像素,则下一个是在7个像素之后,这就是条件为真的原因。

我尝试通过使用didBeginContact或didEndContact解决问题,但它没有改变任何我认为解决问题我需要处理碰撞后方格是&#34;取代&#34;在物理模拟器的顶部,即使我没有在屏幕上看到任何动作,一切都是正确的。

//Configuration of the physics body in Platform.m 

- (void)configureCollisionBody {

    self.physicsBody = [SKPhysicsBod bodyWithRectangleOfSize:self.frame.size];    
    self.physicsBody.dynamic=NO;    
    self.physicsBody.affectedByGravity = NO;    
    self.physicsBody.mass=0.0f;    
    self.physicsBody.categoryBitMask = CollisionTypePlatform;
    self.physicsBody.collisionBitMask = 0;
    self.physicsBody.contactTestBitMask = CollisionTypeSquare;
    self.physicsBody.usesPreciseCollisionDetection=YES;

}

//Configuration of the physics body in Square.m

- (void)configureCollisionBody {

    CGSize physicsBodySize=CGSizeMake(self.frame.size.width, self.frame.size.height);
    self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:physicsBodySize];
    self.physicsBody.allowsRotation=NO;
    self.physicsBody.mass=0.1f;
    self.physicsBody.dynamic=YES;
    self.physicsBody.restitution=0.0f;
    self.physicsBody.affectedByGravity = YES;
    self.physicsBody.categoryBitMask = CollisionTypeSquare;
    self.physicsBody.collisionBitMask = CollisionTypePlatform;
    self.physicsBody.usesPreciseCollisionDetection=YES;

}

enter image description here

0 个答案:

没有答案