bodyWithEdgeLoopF​​romRect不能在横向工作

我只是试图在景观中设置一个基本场景,引力,并在一个边缘循环的场景。

我设置了场景的物理体和mainCharacter精灵物理体,这里是我的代码:

-(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { self.backgroundColor = [SKColor redColor]; [self setPhysicsBody:[SKPhysicsBody bodyWithEdgeLoopFromRect:[self frame]]]; } return self; } -(void)setupMain { if (!self.mainCharacter) { self.mainCharacter = [[SKSpriteNode alloc] initWithImageNamed:@"spriteDefault"]; [self.mainCharacter setPosition:CGPointMake(CGRectGetMidX([self frame]), CGRectGetMidY([self frame]))]; [self addChild:self.mainCharacter]; self.mainCharacter.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.mainCharacter.frame.size]; self.mainCharacter.physicsBody.dynamic = YES; self.mainCharacter.physicsBody.affectedByGravity = YES; self.mainCharacter.physicsBody.mass = 0.02; } } 

所以,在肖像模式下,一切都很完美,但是在风景中,事情变得非常棘手。

我觉得它有点关系

  [self setPhysicsBody:[SKPhysicsBody bodyWithEdgeLoopFromRect:[self frame]]]; 

奇怪的是,横向的x轴的边缘循环(纵向模式下的y轴)工作正常,但我只是通过y轴(x纵向)。

我的猜测是,框架在y轴上的位置不在横向模式下的屏幕范围内的某个位置……意味着它位于屏幕的上方或下方。 …也许…不太确定。

但是,我已经尝试了几个不同的选项,其中包括通过使用CGRectMake()手动设置矩形,我无法使任何东西正常工作。

任何build议将不胜感激!!!

好的,这是一个超级Janky修复…

  self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(0, 200, 320, 200)]; 

我不知道为什么这个工程…这显然会有一些小屏幕尺寸的问题…更好的修复和解释将不胜感激! 感谢:D

您将需要在viewWillLayoutSubviews中设置边缘循环,因为场景大小仅在以下时间已知:

 -(void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; // Configure the view. SKView * skView = (SKView *)self.view; if (!skView.scene) { skView.showsFPS = YES; skView.showsNodeCount = YES; SKScene * scene = [MyScene sceneWithSize:skView.bounds.size]; scene.scaleMode = SKSceneScaleModeAspectFill; [skView presentScene:scene]; } 

}

你需要设置mainCharacter的collisionBitMask等于sceneCategory(需要创build)。 只有你告诉他们,你的节点才会受到影响。