联系人在仍然存在时结束

时间:2014-05-22 02:55:16

标签: ios sprite-kit

我正在制作一个瓷砖地图游戏,最好通过参考下面的图片来描述。 红色瓷砖是我的地板,它与我的播放器碰撞,它还处理精灵是否可以跳跃(如果没有接触不跳跃)。因此,当我走过红瓦时,我会“跳过” 但是,如果我遇到黄色瓷砖。我的NSLog再次打印“可以跳”,因为我对玩家和墙的接触很长。但是,如果我离开黄色瓷砖,仍然走在红色。我收到一条通知说“不能跳”,因此我的精灵不再跳,因为它没有检测到我的玩家和我的地板之间的碰撞。

如果能得到关于如何处理这个问题的想法,我会很高兴。 感谢

floor.name = @"floor";
floor.position = CGPointMake(x + w/2, y + h/2);
floor.zPosition=0;

floor.physicsBody =
[SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(w, h)];
floor.physicsBody.usesPreciseCollisionDetection=YES;
floor.physicsBody.categoryBitMask =  floorCategory;
floor.physicsBody.contactTestBitMask=spriteCategory;
floor.physicsBody.dynamic = NO;




- (void)didBeginContact:(SKPhysicsContact *)contact {
  uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
  if (collision == (floorCategory|spriteCategory)) {

      NSLog(@"Can jummp");
      onFloor=YES;

 }
}
- (void) didEndContact:(SKPhysicsContact *)contact {
  uint32_t contactTest = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
  if (contactTest == (spriteCategory| floorCategory)) {


    NSLog(@"dont jumps");
    onFloor = NO;
}

enter image description here

1 个答案:

答案 0 :(得分:0)

问题已在聊天中解决。

问题是红色和黄色物体都有相同的物理类别(floorCategory)。

玩家在与红色物体接触时与黄色物体接触。然后玩家通过向右移动失去与黄色物体的接触,并触发了didEndContact:方法,因为黄色物体与红色物体具有相同的类别,从而设置了“无跳跃”状态。

解决方案是在黄色物体的一侧添加“墙壁类别”,从而防止触发didEndContact: