2013-11-23 74 views
1

我有一架飛機的SKSpriteNode。以下是圖像(300像素x 83px):SKPhysicsBody看起來太大了

An airplane

的圖像被命名爲[email protected]在我的Xcode項目。

現在我加入了物理體飛機:

CGFloat offsetX = self.size.width * self.anchorPoint.x; 
CGFloat offsetY = self.size.height * self.anchorPoint.y; 

CGMutablePathRef path = CGPathCreateMutable(); 

CGPathMoveToPoint(path, NULL, 24 - offsetX, 124 - offsetY); 
CGPathAddLineToPoint(path, NULL, 24 - offsetX, 47 - offsetY); 
CGPathAddLineToPoint(path, NULL, 339 - offsetX, 1 - offsetY); 
CGPathAddLineToPoint(path, NULL, 401 - offsetX, 3 - offsetY); 
CGPathAddLineToPoint(path, NULL, 452 - offsetX, 52 - offsetY); 
CGPathAddLineToPoint(path, NULL, 411 - offsetX, 78 - offsetY); 
CGPathAddLineToPoint(path, NULL, 295 - offsetX, 78 - offsetY); 
CGPathAddLineToPoint(path, NULL, 268 - offsetX, 93 - offsetY); 
CGPathAddLineToPoint(path, NULL, 95 - offsetX, 78 - offsetY); 
CGPathAddLineToPoint(path, NULL, 62 - offsetX, 124 - offsetY); 

CGPathCloseSubpath(path); 

self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path]; 

CGPathSKPhysicsBody Path Generator

產生要調試飛機的物理身體,我增加了一個SKShapeNode具有相同CGPath爲物理實體:

SKShapeNode *shape = [[SKShapeNode alloc] init]; 
shape.path = path; 
shape.strokeColor = [SKColor colorWithRed:1.0 green:0 blue:0 alpha:0.5]; 
[self addChild:shape]; 

這裏是結果:

result

我做錯了什麼?

PS:注意到一件有趣的事情。如果我指定CGPath如下:

CGPathMoveToPoint(path, NULL, 24/3.0 - offsetX, 124/3.0 - offsetY); 
CGPathAddLineToPoint(path, NULL, 24/3.0 - offsetX, 47/3.0 - offsetY); 

形狀很適合飛機!

+0

您是否使用圖像的@ 2x版本創建了具有生成器的形狀?嘗試使用「@ 2x」圖片並確保設置了Retina複選框。通常嘗試不同的變化以查看Retina和非Retina設備上的外觀。雖然形狀看起來不像2倍縮放,更像是3倍或4倍。 – LearnCocos2D

+0

我正在使用我附加的圖像。相同的圖像發送到Xcode項目。形狀看起來像3倍縮放。 –

回答

1

這可能不相關,但是,您定義的形狀是concave。文檔說它必須是convex。如果用凸形重新創建路徑,這有幫助嗎?

enter image description here

實例:Convex and Concave polygons

+0

你可以鏈接它說的文檔嗎?我很確定它說你可以使用凹面,但你會得到laggy遊戲 – Andriko13

+0

啊,好的。也許是我的錯誤。從我讀過的所有內容來看,你不能創建凹SKPhysicsBody,但是,你可以將凸體連接在一起創建一個看起來凹的體,但是它由凸形組成。 (https://developer.apple。COM /庫/ IOS /文檔/ SpriteKit /參考/ SKPhysicsBody_Ref/index.html的#// apple_ref/OCC/CLM/SKPhysicsBody/bodyWithPolygonFromPath :)。你在哪裏閱讀過關於「..game laggy gameplay ..」? – RichS

+0

那麼,laggy的部分是我自己的一點,因爲像你說的那樣,它需要更多的處理速度,因爲你需要使用更復雜的凸面教室。 – Andriko13

0

必須使用原始尺寸(320×480)或在iPhone5的+(320×568)的情況下。 @ 2x/@ 4x圖像僅用於爲視網膜設備提供更高分辨率的圖像。但出於向後兼容性的原因,所有設備仍共享相同的座標系。

所以,你的路徑應該是這樣的:

SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"jPfsF.png"]; 

CGFloat offsetX = sprite.frame.size.width * sprite.anchorPoint.x; 
CGFloat offsetY = sprite.frame.size.height * sprite.anchorPoint.y; 

CGMutablePathRef path = CGPathCreateMutable(); 

CGPathMoveToPoint(path, NULL, 18 - offsetX, 41 - offsetY); 
CGPathAddLineToPoint(path, NULL, 31 - offsetX, 25 - offsetY); 
CGPathAddLineToPoint(path, NULL, 91 - offsetX, 31 - offsetY); 
CGPathAddLineToPoint(path, NULL, 95 - offsetX, 24 - offsetY); 
CGPathAddLineToPoint(path, NULL, 136 - offsetX, 26 - offsetY); 
CGPathAddLineToPoint(path, NULL, 148 - offsetX, 18 - offsetY); 
CGPathAddLineToPoint(path, NULL, 133 - offsetX, 2 - offsetY); 
CGPathAddLineToPoint(path, NULL, 75 - offsetX, 1 - offsetY); 
CGPathAddLineToPoint(path, NULL, 9 - offsetX, 16 - offsetY); 
CGPathAddLineToPoint(path, NULL, 11 - offsetX, 40 - offsetY); 

CGPathCloseSubpath(path); 

sprite.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path]; 
0

我猜,你需要計算的點,而不是像素。如果您有@ 1x圖像,那麼它將具有相同的點和像素大小。對於@ 2x,您將擁有相同的點數,但@倍的像素數等等......

相關問題