bodyWithEdgeLoopF​​romRect不能在景观中工作

问题描述:

我只是试图在景观中设置一个基本场景,引力和边缘循环中的场景。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() 我自己手动设置矩形我无法获得任何正常工作。

任何意见将不胜感激!

+1

检查此问题http://stackoverflow.com/questions/19353942/skscene-ipad-height-width-reversed/19354725#19354725 – DogCoffee

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

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

我不知道为什么这个工程......而这显然将会对更小的屏幕尺寸有些问题...更好的修复并解释将非常感谢! 感谢:d

+0

请参阅Smick对实际解决方案的评论 – LearnCocos2D

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

}

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