2016-11-19 1 views
1

Я пытаюсь создать физическое тело для узла спрайта, который предназначен только для контура спрайт-узла. Для этого я попытался использовать edgeLoopFromRect. Однако, когда я пытаюсь это сделать, физическое тело не соответствует позиции узла спрайта. Например, узел спрайта будет находиться в центре экрана, и его физическое тело будет находиться в верхнем углу экрана (см. Рис., Схема физического тела показывает только угол, так как некоторые находятся за пределами экрана). Я хочу использовать это, чтобы создать схему игровой области, которая будет действовать как пограничник для объекта, с которым можно связаться для игры.Swift, SpriteKit: положение физического тела неправильно для SpriteNode при использовании edgeLoopFromRect

Screen Shot

Вот мой код:

//Physic Body Outline Test 

    let screenS = SKSpriteNode(imageNamed: "TestImage") 
    screenS.size = CGSize(width: 100, height: 100) 
    screenS.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 
    screenS.physicsBody = SKPhysicsBody(edgeLoopFrom: screenS.frame) 
    screenS.physicsBody!.affectedByGravity = false 
    self.addChild(screenS) 

Почему позиция так далеко? Что я делаю не так? Это даже правильный подход к созданию плана физического тела для игровой зоны?

Спасибо! : D

+0

Можете ли вы опубликовать скриншот, показывающий спрайт и физику? –

+0

«Я хочу использовать это, чтобы создать схему игровой области, которая будет действовать как граница для объекта, с которым можно связаться» - вы хотите, чтобы контур спрайта был границей для спрайта, с которым можно связаться? Спринты обычно имеют физиологические тела объемной базы; основанные на краю тела используются для границ и т. д., но вы обычно используете рамку сцены, чтобы остановить спрайт, выходящий из экрана. –

ответ

2

Просто переместите линию, задав положение спрайта после определения физического объекта - в этом случае в SpriteKit есть ошибка. Вы должны закончить с:

screenS.physicsBody = SKPhysicsBody(edgeLoopFrom: screenS.frame) 
screenS.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 

Это все еще немного странно использовать edgeLoop как physicsBody для спрайта - SK будет думать, спрайт не имеет массы и т.д., и любые физические взаимодействия не будет работать, как ожидалось.

+0

спасибо: D и спасибо за совет, у меня будет игра с ней :) – HeanMachine

1

Если вы удалите строку screenS.position, она должна работать, по умолчанию, спрайты уже сосредоточены в центре их родителей, установив позицию перед тем, как добавить спрайт в качестве ребенка. Я думаю, что только движет PhysBody, а не сам спрайт из того, что я тестировал.

1

Вы используете рамку спрайтов при создании физического тела, физическое тело относительно спрайта, на которое вы его положили, поэтому оно выключено. Добавьте физическое тело, прежде чем перемещать положение спрайта, и он должен выстроить линию

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