不在对象之间维护联系

时间:2014-06-16 17:28:43

标签: objective-c sprite-kit

我一直致力于一个游戏,我遇到了一个已被证明有点挑战的问题。我已就此提出过要求,但我希望进一步澄清此事。 我有一个spritekit游戏,其中一个角色在地面上碰撞。我也有代码,以防止精灵触及"地板"我也有"墙"没有任何东西发生的瓷砖,但更多的是为了防止精灵在墙边落下时跳跃。

我的问题是,如果我的精灵穿过地板走到墙上。我的NSLog显示"不要跳#34;好像说我的精灵不能跳,但他还在场上。按下我的箭头键可以阻止我的控制台日志,这似乎表明接触正在进行并且与地板一起破坏,因为精灵是"试图离开瓷砖"但是因为他不能推迟。为了更好地描述我想要描述的内容,我上传了20秒的视频到youtube,我的联系代码如下。 如果有人能看到这个问题,为什么我的精灵在接触墙壁时不再接触我的地板,我将不胜感激。

由于

https://www.youtube.com/watch?v=9nV3TaRupno

#pragma mark -  Contact
- (void)didBeginContact:(SKPhysicsContact *)contact {
  uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
  if (collision == (PCFloorCategory|PCPlayerCategory)) {

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

  }
  if (collision == (PCWinCategory|PCPlayerCategory)) {

    NSLog(@"You win");
    [self endLevelWithSuccess:YES];

  }



- (void) didEndContact:(SKPhysicsContact *)contact {

  uint32_t contactTestb = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
  if (contactTestb == (PCPlayerCategory | PCWallCategory)) {

    NSLog(@"Please jumps");
    // jumpButtonDown=false;
  //  onGround = YES;
  }

  uint32_t contactTest = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
  if (contactTest == (PCPlayerCategory | PCFloorCategory)) {


    NSLog(@"dont jumps");
  //  jumpButtonDown=false;
    onGround = NO;
  }


}

移动方法

if (controlButtonDown) {

         SKNode *node= [bg childNodeWithName:@"player"];
        float angle = atan2f (touchY - 100, touchX - 100) ;
          SKAction *movePlayer=[SKAction moveByX:6*cosf(angle) y:0 duration:0.005];
      [node runAction: movePlayer];

 //  [_player update:currentTime];

  }

0 个答案:

没有答案