bodyWithEdgeLoopF​​romRect无法在横向中工作

时间:2013-10-25 03:42:56

标签: ios iphone objective-c sprite-kit skphysicsbody

我只是尝试在景观中设置一个基本场景,重力,并使场景处于边缘循环中。

我设置了场景的物理体和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() 我无法正常工作。

任何建议都将非常感谢!!!

3 个答案:

答案 0 :(得分:0)

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

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

我不确定为什么会这样......而且显然在较小的屏幕尺寸上会有一些问题...更好的修复和解释会非常感激!! 谢谢:D

答案 1 :(得分:0)

您需要在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];
}

}

答案 2 :(得分:0)

您需要将mainCharacter的collisionBitMask设置为等于sceneCategory(需要创建)。只有在告诉他们的情况下,您的节点才会受到影响。