2013-10-16 40 views
3

我有以下代碼來創建一個矩形磚和與之相關的物理體。我預計物理實體與磚塊的尺寸和位置是一樣的實心矩形,但是我得到的是一個我認爲有一個位置偏移量和一個尺寸差異的物體。我錯過了座標系有沒有問題?什麼是正確的方法來解決這個問題?SKPhysicsBody不如預期

- (void)addBrick { 
    SKShapeNode *brick = [[SKShapeNode alloc] init]; 

    CGRect brickBoundary = CGRectMake(0.0, 0.0, 100.0, 100.0); 
    brick.position = CGPointMake(100.0, 100.0); 
    brick.path = CGPathCreateWithRect(brickBoundary, nil); 

    brick.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(100.0,100.0)]; 
    brick.physicsBody.restitution = 1.0; 
    brick.physicsBody.friction = 0.0; 
    brick.physicsBody.dynamic = NO; 

    [self addChild:brick]; 
} 
+0

大小必須一半frame.size的,因爲身體矩形大小是從中心的寬度/高度向任一側,而不是總寬度 – LearnCocos2D

回答

5

這是創建矩形並向其添加物理實體的簡單方法。

SKSpriteNode *n1 = [SKSpriteNode spriteNodeWithColor:[UIColor blueColor] size:objectSize]; 
n1.position = CGPointMake(self.size.width/2, 200); 
n1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:n1.size]; 
n1.physicsBody.dynamic = NO; 
[self addChild:n1]; 

這裏是從RW教程修改後的版本,以提供您儘管人們對調試矩形

// RW Debug modified version 
CGPathRef bodyPath = CGPathCreateWithRect(CGRectMake(-n1.size.width/2, -n1.size.height/2, n1.size.width, n1.size.height),nil); 
SKShapeNode *shape = [SKShapeNode node]; 
shape.path = bodyPath; 
shape.strokeColor = [SKColor colorWithRed:1.0 green:0 blue:0 alpha:0.5]; 
shape.lineWidth = 1.0; 
[n1 addChild:shape]; 
CGPathRelease(bodyPath); 

您實現這個生產(紅色是物理盒)。

enter image description here

+0

謝謝,它的工作:)。但是你知道我的實現問題在哪裏嗎? – Roshan

+1

修復了您的實現CGRect brickBoundary = CGRectMake(-50,-50,100.0,100.0);我認爲它是因爲spriteNodes沒有錨點,所以它的設置爲0,0?我完全確定抱歉。 – DogCoffee

+0

是的,我認爲問題是與錨點...太感謝:) – Roshan