2014-09-30 2 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 points, но я хотел протестировать ее с помощью простого rect. Я тестирую столкновение с мячом, и он, кажется, только сталкивается с линией от bottomRight до topRight и игнорирует остальные. Кто-нибудь есть идея о том, что происходит здесь?

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

+2

skView.showsPhysics = YES; может помочь вам, вы можете увидеть тонкие физические тела вокруг ваших фигур. – dragoneye

+0

@dragoneye Спасибо за подсказку. Похоже, что применяемое физическое тело неверно. Есть ли у вас другие предложения? Я обновил исходное сообщение с изображением – dchhetri

ответ

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) 

Это устанавливает правильные границы столкновений с физикой. Хотя это решает мою проблему, любое понимание того, почему исходный код не работал с bezier path, будет отличным. Благодарю.

Смежные вопросы