У меня есть простая игра для прыжков, где герой прыгает через мяч, катящийся к нему.SpriteKit только обнаруживает частичное столкновение по физическому телу
нет установки силы тяжести на сцене
героя прыгать прямо вверх, а затем вниз. если герой остается в состоянии «didBeginContact», и я могу обнаружить столкновение. Если фронт героя попадает в катящийся мяч, когда он вскакивает или спускается, «didBeginContact» уволен. Однако, если задняя половина героя приземляется на мяч, когда он идет под ним, он не обнаруживает столкновения.
Кто-нибудь есть идеи, почему он только ловит столкновение спереди? Это больше похоже на обнаружение границ и обнаружение объектов! это возможно?
static const uint32_t groundCategory = 0x1 << 1;
static const uint32_t obstacleCategory = 0x1 << 2;
static const uint32_t heroCategory = 0x1 << 3;
SKSpriteNode *hero = [[SKSpriteNode alloc] initWithColor:[SKColor redColor] size:CGSizeMake(100, 115)];
[hero setPosition:CGPointMake(HERO_UP_POSITION_X, HEIGHT_GAME/2 + hero.size.height/2 + 10)];
hero.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:hero.size];
[hero.physicsBody setAffectedByGravity:NO];
hero.physicsBody.usesPreciseCollisionDetection = YES;
hero.physicsBody.allowsRotation = NO;
hero.physicsBody.categoryBitMask = heroCategory;
hero.physicsBody.contactTestBitMask = obstacleCategory | groundCategory;
hero.physicsBody.collisionBitMask = 0;
hero.zPosition = 0;
hero.name = kHeroUpName;
[self addChild:hero];
obstacle = [[SKSpriteNode alloc] initWithImageNamed:kImgObstacleDown];
obstacle.name = @"obstacle";
[obstacle setPosition:CGPointMake(WIDTH_GAME + x, HEIGHT_GAME/2 + y)];
obstacle.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:obstacle.size.width/2];
obstacle.physicsBody.usesPreciseCollisionDetection = YES;
[obstacle.physicsBody setAffectedByGravity:NO];
obstacle.physicsBody.categoryBitMask = obstacleCategory;
obstacle.physicsBody.contactTestBitMask = heroCategory;
obstacle.physicsBody.collisionBitMask = 0;
obstacle.zPosition = 1;
спасибо, я ценю вас помочь, но у меня есть что. // прикосновение для героя вверх если ([objectAName isEqualToString: kHeroUpName] || [objectBName isEqualToString: kHeroUpName]) { // другой объект наш герой вверх прикоснулся SKPhysicsBody * другой = (contact.bodyA. categoryBitMask == heroCategory? contact.bodyB: contact.bodyA); if ([other.node.name isEqualToString: @ "препятствие"]) { –
У меня есть точка останова сразу внутри doBeginContact и она никогда не попадает в третий сценарий –