2014-09-30 50 views
1

下面是測試代碼:SpriteKit PhysicsBody沒有申請我的貝塞爾曲線

var paths = UIBezierPath() 
var bottomLeft = CGPoint(x: dim.minX, y:dim.minY) 
var bottomRight = CGPoint(x: dim.maxX , y: dim.minY) 
var topRight = CGPoint(x: dim.maxX, y: dim.maxY) 
var topLeft = CGPoint(x: dim.minX, y: dim.maxY) 


paths.moveToPoint(bottomRight) 
paths.addLineToPoint(topRight) 

paths.moveToPoint(topRight) 
paths.addLineToPoint(topLeft) 

paths.moveToPoint(topLeft) 
paths.addLineToPoint(bottomLeft) 

paths.moveToPoint(bottomLeft) 
paths.addLineToPoint(bottomRight) 


var n = SKShapeNode(path: paths.CGPath) 
n.strokeColor = UIColor.greenColor() 
n.physicsBody = SKPhysicsBody(edgeLoopFromPath: paths.CGPath) 
shapeLayer.addChild(n) 

它繪製一個矩形標準。我會在topRight到topLeft點的中間添加一些曲線,但我想用簡單的矩形測試它。我正在用一個球來測試碰撞,它似乎只是碰撞到從右到下的行,而忽略其餘的行。有沒有人有關於這裏發生了什麼的想法?

Physic issue: Physics is not applied fully to middle rectangle in gray

+2

skView.showsPhysics = YES;可以幫助你,你可以看到你的形狀周圍的薄物理機構 – dragoneye 2014-09-30 06:59:24

+0

@dragoneye感謝您的提示。看起來應用的物理體是不正確的。你有什麼其他的建議?我已經用圖像更新了原始帖子 – dchhetri 2014-10-02 00:56:34

回答

1

雖然我不知道用貝塞爾路徑和所需要的物理碰撞設置代碼的問題,我卻能夠得到它使用的原始路徑,並添加行工作:

var polygonPath = CGPathCreateMutable() 
    CGPathMoveToPoint(polygonPath, nil, bottomRight.x, bottomRight.y) 
    CGPathAddLineToPoint(polygonPath, nil, topRight.x, topRight.y) 
    CGPathAddLineToPoint(polygonPath, nil, topLeft.x, topLeft.y) 
    CGPathAddLineToPoint(polygonPath, nil, bottomLeft.x, bottomLeft.y) 
    CGPathCloseSubpath(polygonPath) 

    var n = SKShapeNode(path: polygonPath) 
    n.strokeColor = UIColor.grayColor() 
    n.physicsBody = SKPhysicsBody(edgeLoopFromPath: polygonPath) 

設置適當的物理碰撞邊界。雖然這解決了我的問題,但爲什麼原始代碼不適用於貝塞爾路徑的任何見解都會很棒。謝謝。