我有一个受重力影响的红色方块,可以跳到从右到左的蓝色方块。 我认为这些块是平台,如果红色方块位于平台顶部,我不删除平台,如果左侧发生碰撞,我只删除这个。
我有一个问题,我试图解决。
当平台顶部发生碰撞时,为了检测它是否在顶部,我写了一个条件,知道红色方块的向下位置是否低于平台的顶部我删除了这个。 / 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;
}