2015-11-19 2 views
0

Я пытаюсь добавить physicsBody в SKShapeNode, который представляет собой прямоугольник. Я построил свой PhysicsBody, используя fromEdgesWithLoop, используя рамку Node как CGRect, чтобы ее построить.Рамка SKShapeNode смещена

Использование опции отладки для отображения PhysicsBody, я вижу, что на самом деле это не сосредоточено на моем спрайте.

PhysicsBody is offset

Я искал в Интернете, чтобы найти, что я должен использовать это:

scene.scaleMode = .ResizeFill 

К сожалению, я перепробовал все scaleMode с и нет никаких различий.

Я также подтвердил свой размер GameScene и он соответствует экрану iPad2 (моя цель), 1024x720.

SKShapeNode является ребенком сцены.

Я попытался установить положение своего узла в центре Scene перед добавлением PhysicsBody с его рамкой, но это ничего не изменило. Узел уже был в центре сцены.

myShape.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)) 
myShape.physicsBody = SKPhysicsBody(edgeLoopFromRect: myShape.frame) 
+0

проверили ли вы опорная точка вашего прямоугольника спрайта? – Stefan

+0

Похоже, что узел формы не центрирован. Попробуйте использовать один из методов init, например 'SKShapeNode (rectOfSize: size)'. @Stefan 'SKShapeNode' не имеет узловую точку. – 0x141E

+0

Я не уверен, что понимаю, с чем? SKShapeNode помещается в GameScene.sks (редактор), я перетащил ShapeNode и поместил его в сцену. Это помогает мне визуализировать расстояния в редакторе. Я могу правильно протестировать, если прикосновение от touchBegan содержится в моем ShapeNode, но я не могу установить его физический элемент из его фрейма. Моя цель - добавить вокруг нее стену, чтобы узлы не выходили наружу. –

ответ

2

Позиция краевой петли относительно узла, к которому она прикреплена. В общем, для edgeLoopFromRect, позиция задается

edge_loop_position = node.position + rect.frame.origin 

В этом случае ваше тело физика компенсируется положением myShape. Один из способов решить эту проблему, чтобы прикрепить петлю края к сцене вместо узла формы:

self.physicsBody = SKPhysicsBody(edgeLoopFromRect: myShape.frame) 

В качестве альтернативы, вы можете вычесть позицию узла из позиции фрейма с

let rect = CGRect(origin:CGPoint(x:myShape.frame.origin.x-myShape.position.x, y:myShape.frame.origin.y-myShape.position.y), size:myShape.frame.size) 
myShape.physicsBody = SKPhysicsBody(edgeLoopFromRect:rect) 
+0

Спасибо ОЧЕНЬ МНОГО! Я понятия не имел, как именно edge_loop, где позиционируется. Это отлично работало и очень помогло мне! –

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