2013-10-25 26 views
4

我只是試圖在景觀中設置一個基本場景,引力和邊緣循環中的場景。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

回答

0

好吧,這是一個超級Janky修復...

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

我不知道爲什麼這個工程......而這顯然將會對更小的屏幕尺寸有些問題...更好的修復並解釋將非常感謝! 感謝:d

+0

請參閱Smick對實際解決方案的評論 – LearnCocos2D

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]; 
} 

}

0

你需要設置的collisionBitMask你mainCharacter等於sceneCategory(需要創建)。如果你告訴他們,你的節點只會受到影響。