2015-01-08 1 views
2

У меня есть 2 узла: монета SKShapeNode и герой SKSpriteNode с делегатом и метод doBeginContact. Контакт работает нормально, но после того, как я отменил текстуру героя, узлы не взаимодействуют. Логика: герой идет по линии, под линией и над позиционированными монетами. Когда герой идет выше строки, все хорошо, но когда я использую метод changeHeroSide, герой обращается вспять и идет под строкой, метод didBeginContact не отвечает.Sprite Kit поворачивает узел на Y

- (void)changeHeroSide 
{    
     self.yScale = -fabs(self.yScale); // this part don't interact under line 

/** BUT THIS PART WORKS WELL AND INTERACTS UNDER LINE 
      self.zRotation = M_PI; 
      self.xScale = fabs(self.xScale);  
**/ 

     self.position = CGPointMake(self.position.x, self.position.y - self.frame.size.height); 
     self.physicsBody.affectedByGravity = NO; 

} 

Создание узлов

- (void)create 
    { 
     self.hero = [[VZHero alloc] initAtPosition:CGPointZero withPlayer:nil]; 
     self.hero.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.hero.frame.size]; 
     self.hero.xScale = -fabs(self.hero.xScale); 

     SKShapeNode *platform = [self getCurrentPlatform]; 
     self.hero.position = CGPointMake([self getHeroEdgeXCoordinateForPlatform:platform], platform.frame.size.height + _hero.frame.size.height/2); 

     self.hero.physicsBody.dynamic = YES; 
     self.hero.physicsBody.categoryBitMask = monsterCategory; 
     self.hero.physicsBody.contactTestBitMask = projectileCategory; 
     self.hero.physicsBody.usesPreciseCollisionDetection = YES; 
     [self addChild:self.hero atWorldLayer:VZWorldLayerCharacter]; 

     SKShapeNode *coin = [SKShapeNode shapeNodeWithCircleOfRadius:radius]; 
     coin.name = @"coin"; 
     coin.strokeColor = [SKColor blackColor]; 
     coin.fillColor = [SKColor yellowColor]; 
     coin.lineWidth = 1; 
     coin.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:radius]; 
     coin.physicsBody.dynamic = NO; 
     coin.position = pos; 
     coin.physicsBody.categoryBitMask = projectileCategory; 
     coin.physicsBody.contactTestBitMask = monsterCategory; 
    // coin.physicsBody.collisionBitMask = 0; 
     coin.physicsBody.usesPreciseCollisionDetection = YES; 

     [self addChild:coin atWorldLayer:VZWorldLayerCharacter]; 
    } 
+3

включить физический отладочный чертеж, изменение масштаба изменяет изображение, а не форму физики – LearnCocos2D

+0

с 'view.showsPhysics = YES;' Как вы создаете физическое тело? – 0x141E

+0

Спасибо, я добавил создание кода узла, попробую с showPhysics – user3312949

ответ

2

Отражающих у масштаба таким образом Мессинг свойства физики тела. Похож на ошибку в SpriteKit (по крайней мере, на iOS 7). Вы можете решить эту проблему, обернув свой спрайт в узле контейнера. This Связанный вопрос может быть полезен.

+0

Спасибо за ваш ответ, но в этом случае я думаю, будет лучше просто изменить zRotate и xScale , ни один узел переноса в другом. Спасибо вообще – user3312949